2012-04-07 8 views
0

私の目標は、firstnameとlastnameの行を含むファイルをアップロードして解析し、各行に対してdbでPersonモデルを作成することです。CSV.parseによるエンコードの問題

私は次の操作を実行して、私のファイルは、アクセント(フランス語の単語)を含むまで、それは

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

正常に動作します、私はこのエンコーディングの問題に対処するための最良の方法は何

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

を取得しますか?

答えて

1

前または

export RUBYOPT=-Ku 

あなたは正しいエンコードでCSVファイルを開く必要があります。たとえば:

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 

はここにヒントがあります:それはおそらくUTF-8ではありません。

あなたのルビーがサポートIRBにこのコマンドで見ることができるエンコーディングのリスト:

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

私はArgumentErrorを持っています: 'mode'は 'r'、 'rb'、 'w'、または 'wb'でなければなりません – TiSer

0

はルビーファイルの先頭に

# encoding: utf-8 

を設定してみてください。レールの

0

入力ファイルのエンコーディングについて見当もつかない場合はensure_encodingを試みる場合があります。

入力エンコーディングを推測し、それをあなたの好みのターゲットエンコーディングに変換しようと試みます(すべてのエンコーディングでは機能しません)。

関連する問題