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.

33
demandé sur rogeliog 2011-12-05 05:31:47

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.

60
répondu Linuxios 2015-02-19 00:57:43

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
12
répondu kixorz 2013-05-22 06:09:58

Spécifier l'encodage avec encoding option:

CSV.foreach(file.path, headers: true, encoding:'iso-8859-1:utf-8') do |row|
  ...
end
11
répondu sudhir Vishwakarma 2018-04-04 20:58:01

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

0
répondu Eliza A 2014-05-13 06:38:19

Ajouter un deuxième argument "r:ISO-8859-1" comme File.open("input_file","r:ISO-8859-1" )

0
répondu Gagan Gami 2014-05-13 07:14:08

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!

0
répondu user3787971 2015-02-04 16:12:37