Ruby/Rails CSV analyse, invalide séquence d'octets en UTF-8
Je suis en train d'analyser un fichier CSV généré à partir d'une feuille de calcul Excel.
Voici mon code
require 'csv'
file = File.open("input_file")
csv = CSV.parse(file)
Mais j'obtiens cette erreur
ArgumentError: invalid byte sequence in UTF-8
Je pense que l'erreur est parce que Excel encode le fichier dans ISO 8859-1 (Latin-1)
et pas dans UTF-8
Quelqu'un peut m'aider avec une solution de contournement pour ce problème, veuillez
Merci d'avance.
- Quelle est la version de ruby?
- La meilleure solution est d'avoir excel encoder en utf-8
- Dans le cas où vous avez besoin pour soutenir les différents codages et de détecter à l'importation, Charlock Holmes a très bien fonctionné pour moi. Voir stackoverflow.com/a/12234195/1343535
Vous devez vous connecter pour publier un commentaire.
Vous devez dire à Ruby que le fichier est en ISO-8859-1. Modifier votre fichier de ligne ouverte à ceci:
Le deuxième argument indique Ruby pour l'ouvrir en lecture seule avec l'encodage ISO-8859-1.
iconv -f ISO-8859-1 -t utf-8 oldfilename > newfilename
avant j'ai trouvé cette réponse.s = Roo::CSV.new("mycsv.csv", csv_options: {encoding: Encoding::ISO_8859_1})
Spécifier l'encodage avec
encoding
option:encoding:
Vous pouvez source d'approvisionnement en codant directement dans le fichier de paramètre de mode:
encoding: 'iso-8859-1'
au lieu de"r:windows-1250"
.Enregistrer le fichier en utf-8, à moins que pour une raison quelconque vous avez besoin pour économiser de l'différemment dans ce cas, vous pouvez spécifier l'encodage du jeu lors de la lecture du fichier
ajouter un deuxième argument
"r:ISO-8859-1"
commeFile.open("input_file","r:ISO-8859-1" )
J'ai eu ce même problème et c'était juste à l'aide de google feuilles de calcul, puis de le télécharger au format CSV. C'était la solution la plus simple.
Puis je suis tombé sur ce petit bijou
https://github.com/singlebrook/utf8-cleaner
Maintenant, je n'ai pas besoin de vous soucier de ce problème. Espérons que cette aide!
Si vous avez un seul (ou peu) de fichier, de sorte que lorsqu'il n'est pas nécessaire de déclarer automatiquement l'encodage sur n'importe quel fichier que vous obtenez à partir de l'entrée, et vous avez le contenu de ce fichier visible en clair dans le texte (txt, csv, etc) séparée de savoir le point-virgule, vous pouvez créer un nouveau fichier avec
.csv
extension manuellement, et coller le contenu de votre fichier, puis d'analyser le contenu comme d'habitude.Gardez à l'esprit que c'est une solution de contournement, mais dans le besoin de l'analyse en linux un seul gros fichier excel, converti à certains saveur de csv, elle met du temps à expérimenter avec tous ces beaux codages