web-dev-qa-db-fra.com

Séquence d'octets non valide dans UTF-8 (ArgumentError)

J'essaie d'exécuter un script Ruby, et j'obtiens toujours une erreur sur cette ligne:

file_content.gsub(/dr/i,'med')

Où j'essaye de remplacer "dr" par "med".

L'erreur est:

program.rb:4:in `gsub': invalid byte sequence in UTF-8 (ArgumentError)

Pourquoi, comment puis-je résoudre ce problème?

Je travaille sur une machine MAC OS X Yosemite, avec Ruby 2.2.1p85.

17
Simplicity

Votre chaîne n'est probablement pas au format UTF-8, alors utilisez

if ! file_content.valid_encoding?
  s = file_content.encode("UTF-16be", :invalid=>:replace, :replace=>"?").encode('UTF-8')
  s.gsub(/dr/i,'med')
end

Voir " Ruby 2.0.0 String # Match ArgumentError: séquence d'octets invalide en UTF-8 ".

20
jon snow