2012-04-07 5 views
0

Mein Ziel ist es, eine Datei mit Zeilen von Vornamen und Nachnamen zu laden, zu analysieren und erstellen Person-Modell in db für jede Zeile.Codierungsproblem mit CSV.parse

ich folgendes tun und es funktioniert gut

file = CSV.parse(the_file_to_parse) 
file.each do |row| 
    person = Person.new(:firstname => row[0], :lastname => row[1]) 
    person.save 
end 

bis meine Datei Akzente (französisch Wörter) enthält, bekomme ich

Encoding::UndefinedConversionError: "\xC3" from ASCII-8BIT to UTF-8: 
INSERT INTO "people" ("created_at", "firstname", "lastname", 
"updated_at") VALUES (?, ?, ?, ?) 

Was ist der beste Weg, um mit dieser Codierung Problem umgehen?

Antwort

1

Sie müssen die CSV-Datei mit der rechten Codierung öffnen. Zum Beispiel:

require 'csv' 
require 'pp' 

encoding = "ISO-8859-1" 

csv = CSV.open "names.csv", "rb:#{encoding}" 
csv.each do |line| 
    puts "#{line[0]} #{line[1]}" 
end 

Hier ist ein Hinweis: es ist wahrscheinlich nicht UTF-8.

Die Liste der Kodierungen, die Ihre Rubin Träger können mit diesem Befehl in irb eingesehen werden:

puts Encoding.list.map(&:to_s).sort 
+0

Ich habe ArgumentError: 'Modus' muss 'r', 'rb', 'w' oder 'wb' sein – TiSer

0

versuchen

# encoding: utf-8 

auf der Oberseite der Rubin-Datei zu setzen. oder

export RUBYOPT=-Ku 

vor Schienen s

0

Wenn Sie keine Ahnung von der Codierung der Eingabedatei haben könnten Sie ensure_encoding versuchen.

Es wird versuchen, die Eingabecodierung zu erraten und versuchen (nicht für alle Codierungen funktioniert), um es in Ihre bevorzugte Zielcodierung zu konvertieren.

Verwandte Themen