Comment convertir une chaîne de caractères en UTF8 en Ruby
j'écris un crawler qui utilise Hpricot. Il télécharge une liste de chaînes de certaines page web, alors j'essaie d'écrire dans le fichier. Quelque chose ne va pas avec l'encodage:
"xC3" from ASCII-8BIT to UTF-8
j'ai des articles qui sont rendus sur une page Web et imprimés de cette façon:
Développement
le str.encoding
retourne UTF-8
, donc force_encoding('UTF-8')
n'aide pas. Comment puis-je convertir ceci en UTF-8 lisible?
3 réponses
votre chaîne semble avoir été encodée dans le mauvais sens:
"Développement".encode("iso-8859-1").force_encoding("utf-8")
#=> "Développement"
semble que votre chaîne pense QU'il est UTF-8, mais en réalité, il est quelque chose D'autre, probablement ISO-8859-1.
définir (forcer) le codage correct d'abord, puis le convertir 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 le Ã
n'a pas de sens, essayez un autre encodage.
" ruby 1.9: invalid séquence d'octets en UTF-8 ", décrit une autre bonne approche avec moins de code:
file_contents.encode!('UTF-16', 'UTF-8')