2012-04-07 48 views
0

我的目標是上傳包含名字和姓氏行的文件,解析它並在每個行中爲數據庫創建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

您需要打開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。

編碼的列表,你的Ruby支持可以使用此命令在IRB查看:

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

我有ArgumentError:'mode'必須是'r','rb','w'或'wb' – TiSer 2013-01-14 10:37:35

0

嘗試設置

# encoding: utf-8 

在ruby文件的頂部。或

export RUBYOPT=-Ku 

軌小號

0

如果你不知道輸入文件的編碼線索,你可以嘗試ensure_encoding

它會嘗試猜測輸入編碼,並嘗試(不適用於所有編碼)將其轉換爲您的首選目標編碼。