web-dev-qa-db-fra.com

Comment convertir une chaîne en UTF8 en Ruby

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?

50
ciembor

Votre chaîne semble avoir été encodée dans le mauvais sens:

"Développement".encode("iso-8859-1").force_encoding("utf-8")
#=> "Développement"
57
Stefan

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.

47
knut

" 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')
4
kaleb4eg