2009-08-25 6 views
2

J'essaye de charger dans ma migration de données une base de données de membre. Beaucoup de noms ont des caractères spéciaux tels que "Ciarán". J'ai mis en place un exemple simple comme ceci:Comment importer en utilisant FasterCSV une ligne avec un nom comme "Ciarán"?

require 'rubygems' 
require 'fastercsv' 

FasterCSV.foreach("/Users/developer/Work/madmin/db/data/Members.csv") do |row| 
    puts row.inspect 
end 

et je reçois le texte suivant:

/usr/local/lib/ruby/gems/1.8/gems/fastercsv-1.5.0/lib/faster_csv.rb:1616:in `shift': FasterCSV::MalformedCSVError (FasterCSV::MalformedCSVError) 

quand je frappe la ligne avec ce nom.

J'ai été googling codage de caractères et UTF-8, mais n'ont pas encore trouvé une solution. J'aimerais conserver les caractères spéciaux, mais je préférerais ne pas avoir à modifier chaque nom de membre qui échoue.

Un grand merci, Brett

Répondre

3

J'ai lu ailleurs que cela peut être résolu par la mise en KCODE. Par exemple:

$KCODE = "U" 

Collez cela en haut. James Edward Grey a également ajouté qu'il ajoutait un support d'encodage à FasterCSV mais qu'il était uniquement dans le réseau.

+1

On dirait que j'ai effectivement mal diagnostiqué - le fichier n'était pas UTF-8, comme je le pensais, mais ISO-8859-1. Je me suis converti - mais ces deux réponses auraient fonctionné si j'avais réellement UTF-i. – Brett

4

Cela fonctionne tout de suite pour moi, mais si vous avez besoin de changer le codage, vous pouvez passer une option d'encodage à FasterCSV. Par exemple, pour lui dire d'utiliser UTF-8, vous pouvez le faire:

require 'rubygems' 
require 'fastercsv' 

FasterCSV.foreach("some file.csv", :encoding => 'u') do |row| 
    puts row.inspect 
end 

Les options d'encodage sont répertoriés dans la documentation new.

Questions connexes