Analyse CSV Ruby/Rails, séquence d'octets invalide en UTF-8
J'essaie 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 je reçois 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 UTF-8
Quelqu'un Peut m'aider avec une solution de contournement pour ce problème, veuillez
Merci d'avance.
6 réponses
Vous devez indiquer à Ruby que le fichier est dans ISO-8859-1. Changez votre ligne d'ouverture de fichier à ceci:
file=File.open("input_file", "r:ISO-8859-1")
Le deuxième argument indique à Ruby d'ouvrir en lecture seule avec le codage ISO-8859-1.
Vous pouvez fournir le codage source directement dans le paramètre mode fichier:
CSV.foreach( "file.csv", "r:windows-1250" ) do |row|
<your code>
end
Spécifier l'encodage avec encoding
option:
CSV.foreach(file.path, headers: true, encoding:'iso-8859-1:utf-8') do |row|
...
end
Enregistrez le fichier en utf-8, sauf si pour une raison quelconque vous devez l'enregistrer différemment, auquel cas vous pouvez spécifier l'ensemble encodé lors de la lecture du fichier
Ajouter un deuxième argument "r:ISO-8859-1"
comme File.open("input_file","r:ISO-8859-1" )
J'ai eu ce même problème et j'utilisais simplement des feuilles de calcul google, puis je les téléchargeais au format CSV. C'était la solution la plus simple.
Puis je suis tombé sur cette gemme
Https://github.com/singlebrook/utf8-cleaner
Maintenant, je n'ai pas besoin de m'inquiéter de ce problème. Espérons que cette aide!