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?

43
demandé sur the Tin Man 2013-06-10 15:03:35

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"
54
répondu Stefan 2013-06-10 12:24:08

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.

42
répondu knut 2017-02-27 23:49:25

" 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')
3
répondu kaleb4eg 2017-05-23 12:03:02