J'essaie d'analyser un fichier CSV généré à partir d'un tableur 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 due au fait qu'Excel code le fichier dans ISO 8859-1 (Latin-1)
et non dans UTF-8
Quelqu'un peut-il m'aider avec une solution de contournement à ce problème, s'il vous plaît
Merci d'avance.
Vous devez indiquer à Ruby que le fichier est au format ISO-8859-1. Changez votre ligne ouverte de fichier en 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.
Spécifiez le codage avecencoding
option:
CSV.foreach(file.path, headers: true, encoding:'iso-8859-1:utf-8') do |row|
...
end
Vous pouvez fournir un codage source directement dans le paramètre mode de fichier:
CSV.foreach( "file.csv", "r:windows-1250" ) do |row|
<your code>
end
Enregistrez le fichier dans utf-8, sauf si pour une raison quelconque vous devez l'enregistrer différemment, auquel cas vous pouvez spécifier l'ensemble codé lors de la lecture du fichier
ajouter le second argument "r:ISO-8859-1"
en tant que File.open("input_file","r:ISO-8859-1" )
J'avais le même problème et je n'utilisais que des feuilles de calcul Google, puis un téléchargement 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 plus besoin de m'inquiéter de ce problème. J'espère que cela t'aides!
Si vous n'avez qu'un (ou plusieurs) fichier, il n'est donc pas nécessaire de déclarer automatiquement le codage sur le fichier que vous avez saisi en entrée, et vous avez le contenu de ce fichier visible en texte clair (txt, csv, etc.) séparé avec ie point-virgule, vous pouvez créer manuellement un nouveau fichier avec l'extension .csv
et y coller le contenu de votre fichier, puis analyser le contenu comme d'habitude.
N'oubliez pas qu'il s'agit d'une solution de contournement, mais que vous avez besoin d'analyser sous Linux un seul gros fichier Excel, converti en une version de CSV, cela vous fait gagner du temps pour expérimenter tous ces encodages sophistiqués.