3 votes

Ruby et conversion de l'encodage

J'importe un fichier CSV dans Ruby (1.8.7). File.open('path/to/file.csv').read renvoie ceci dans la console :

Stefan,Engstr\232m

L'encodage est identifié comme iso-8859-2 par UniversalDetector (chardet gem).

UniversalDetector::chardet("Stefan,Engstr\232m")
=> {"confidence"=>0.626936305574385, "encoding"=>"ISO-8859-2"} 

En essayant de convertir la chaîne de caractères, on obtient le résultat suivant :

Iconv.conv("UTF-8", "ISO-8859-2", "Stefan,Engstr\232m")
 => "Stefan,Engstrm"

alors que je m'y attendais :

 => "Stefan,Engström"
  • La chaîne pourrait-elle vraiment être dans un autre encodage ?
  • Je n'ai pas vu le \232 avant, généralement lorsque les chaînes de caractères sont codées de manière étrange, un caractère bizarre apparaîtra à la place, par exemple un caractère chinois.

Faites-moi savoir si je dois fournir plus d'informations ou préciser quelque chose.

5voto

mu is too short Points 205090

L'encodage est probablement "Macintosh Roman" une autre option serait "Mac Central European" y "Mac Islandais" . Le site \nnn La notation utilise l'octal donc \232 est 154 en décimal et le caractère 154 est la minuscule O-umlaut ("ö") que vous attendez dans ces trois codages ; je ne vois pas 154 dans aucun des codepages Windows ou jeux de caractères ISO 8859. Je suppose que le Mac Roman est plus courant que les encodages islandais ou d'Europe centrale.

Essayez d'utiliser 'MacRoman' comme votre encodage source avec Iconv :

>> Iconv.conv("UTF-8", "MacRoman", "Stefan,Engstr\232m")
=> "Stefan,Engström"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X