2012-04-07 59 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

它会尝试猜测输入编码,并尝试(不适用于所有编码)将其转换为您的首选目标编码。