Comment changer l'encodage lors de CSV analyse dans les Rails
Je voudrais savoir comment puis-je changer l'encodage de mon fichier CSV lors de l'importation et de l'analyser. J'ai ce code:
csv = CSV.parse(output, :headers => true, :col_sep => ";")
csv.each do |row|
row = row.to_hash.with_indifferent_access
insert_data_method(row)
end
Quand je lis mon fichier, j'obtiens cette erreur:
Encoding::CompatibilityError in FileImportingController#load_file
incompatible character encodings: ASCII-8BIT and UTF-8
J'ai lu sur row.force_encoding('utf-8')
mais il ne fonctionne pas:
NoMethodError in FileImportingController#load_file
undefined method `force_encoding' for #<ActiveSupport::HashWithIndifferentAccess:0x2905ad0>
Grâce.
Au lieu de le convertir en un autre encodage, serait-il possible d'ajouter une étape d'indirection et de sortie des fichiers séparés? Par exemple, un fichier texte est encodé en UTF-8 dans certaines parties, mais UTF-16LE dans d'autres. Aussi longtemps que les en-têtes sont identiques, la sortie d'un fichier pour filename_utf8.txt et un autre pour filename_utf16le.txt. De cette façon pourrait rendre possible pour ne pas forcer l'encodage.
OriginalL'auteur TW147 | 2011-08-16
Vous devez vous connecter pour publier un commentaire.
J'ai eu à lire les fichiers CSV encodé en ISO-8859-1.
Faire le documentée
jeté l'exception
alors j'ai fini par lire le fichier et de le convertir en UTF-8 lors de la lecture, puis l'analyse de la chaîne:
OriginalL'auteur Martin M
force_encoding est destiné à être exécuté sur une chaîne, mais on dirait que vous êtes en l'appelant sur une table de hachage. Vous pourriez dire:
ArgumentError in FileImportingController#load_file
invalid byte sequence in UTF-8
essayez d'exécuter ceci à la place: Iconv.conv('utf-8//IGNORER','utf-8',sortie)
Malheureusement, j'obtiens cette erreur:
Encoding::CompatibilityError in FileImportingController#load_file
incompatible character encodings: ASCII-8BIT and UTF-8
Je suppose que vous n'avez pas vraiment à changer le type d'encodage, votre objectif est d'analyser le fichier. où en êtes-vous de chargement de votre chaîne ? Peut-être il y a une autre approche qui peut être pris.
Je suis à le charger à partir d'un fichier CSV. Maintenant ça fonctionne, j'ai changé l'encodage directement à partir du fichier.
OriginalL'auteur Luke Cowell
Hey j'ai écrit un petit post de blog à propos de ce que j'ai fait, mais c'est un peu plus détaillé que ce qui a déjà été posté. Pour quelque raison que ce soit, je ne pouvais pas obtenir ces solutions fonctionnent et ce qui ne l'.
Ce résumé est que j'ai simplement remplacer (ou dans mon cas, supprimer) les invalides/caractères non définis dans mon fichier puis le réécrire. J'ai utilisé cette méthode pour convertir les fichiers:
Espère que cette aide.
Edit: Pas de destination de l'encodage spécifié ici parce que coder suppose que vous êtes l'encodage par défaut de votre encodage qui, pour la plupart des applications Rails est de l'UTF-8 (je crois)
OriginalL'auteur Alex Villa