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 depuis 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 articles qui sont rendus sur une page Web et imprimés de cette manière:

 Développement 

le str.encoding retourne UTF-8 , donc force_encoding('UTF-8') n’aide pas. Comment puis-je convertir cela 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’il s’agit d’un UTF-8, mais en réalité, c’est autre chose, probablement ISO-8859-1.

Définissez (force) l’encodage correct en premier, 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 le à n’a aucun sens, alors 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')