我的目标是上传一个包含firstname和lastname行的文件,解析它并在db中为每一行创建Person模型。
我执行以下操作并且工作正常
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 (?, ?, ?, ?)
处理此编码问题的最佳方法是什么?
答案 0 :(得分:2)
您需要使用正确的编码打开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:
中使用此命令查看您的ruby支持的编码列表puts Encoding.list.map(&:to_s).sort
答案 1 :(得分:0)
尝试设置
# encoding: utf-8
在ruby文件的顶部。或
export RUBYOPT=-Ku
在rails s之前
答案 2 :(得分:0)
如果您对输入文件的编码一无所知,可以尝试ensure_encoding。
它将尝试猜测输入编码并尝试(不适用于所有编码)将其转换为首选目标编码。