J'utilise ruby 1.9.2
J'essaie de analyser un fichier CSV qui contient certains mots français (p. ex. spécifié) et placer le contenu dans une base de données MySQL.
Quand je lis les lignes du fichier CSV,
file_contents = CSV.read("csvfile.csv", col_sep: "$")
Les éléments reviennent sous forme de chaînes de caractères qui sont ASCII-8BIT encoded (spécifié becomes sp \xE9cifi\xE9 ), et les chaînes de caractères comme "spécifié" ne sont alors PAS correctement enregistrées dans ma base de données MySQL.
Yehuda Katz dit que l'ASCII-8BIT est en réalité des données "binaires", ce qui signifie que CSV n'a aucune idée de la façon de lire l'encodage approprié.
Donc, si j'essaie de faire CSV forcer l'encodage comme ceci :
file_contents = CSV.read("csvfile.csv", col_sep: "$", encoding: "UTF-8")
J'obtiens l'erreur suivante
ArgumentError: invalid byte sequence in UTF-8:
Si je reviens à mes chaînes codées en ASCII-8BIT d'origine et que j'examine la chaîne que mon CSV a lue en ASCII-8BIT, elle ressemble à ceci "Non sp \xE9cifi\xE9 " instead of "Non spécifié".
Je n'arrive pas à convertir "Non sp \xE9cifi\xE9 "en "Non spécifié" en procédant comme suit "Non sp\xE9cifi\xE9".encode("UTF-8")
parce que je reçois cette erreur :
Encoding::UndefinedConversionError: "\xE9" from ASCII-8BIT to UTF-8
,
ce qui, selon Katz, se produirait parce que l'ASCII-8BIT n'est pas vraiment un "codage" correct des chaînes de caractères.
Questions :
- Puis-je faire en sorte que CSV lise mon fichier dans l'encodage approprié ? Si oui, comment ?
- Comment convertir une chaîne de caractères ASCII-8BIT en UTF-8 pour la stocker correctement dans MySQL ?