J'écris un robot qui utilise Hpricot. Il télécharge une liste de chaînes d'une page Web, puis j'essaie de l'écrire dans le fichier. Quelque chose ne va pas avec l'encodage:
"\xC3" from ASCII-8BIT to UTF-8
J'ai des éléments qui sont rendus sur une page Web et imprimés de cette façon:
Développement
le str.encoding
renvoie UTF-8
, donc force_encoding('UTF-8')
n'aide pas. Comment puis-je convertir ceci en UTF-8 lisible?
Votre chaîne semble avoir été encodée dans le mauvais sens:
"Développement".encode("iso-8859-1").force_encoding("utf-8")
#=> "Développement"
Il semble que votre chaîne pense qu’elle est au format UTF-8, mais en réalité, c’est autre chose, probablement ISO-8859-1.
Définissez (forcez) le bon codage d’abord, puis convertissez-le en UTF-8.
Dans votre exemple:
puts "Développement".encode('iso-8859-1').encode('utf-8')
Une alternative est:
puts "\xC3".force_encoding('iso-8859-1').encode('utf-8') #-> Ã
Si la Ã
n'a aucun sens, puis essayez un autre encodage.
" Ruby 1.9: séquence d'octets non valide dans UTF-8 " décrit une autre bonne approche avec moins de code:
file_contents.encode!('UTF-16', 'UTF-8')