0

我的目标是上传一个包含名字和姓氏行的文件,解析它并在 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 (?, ?, ?, ?)

处理此编码问题的最佳方法是什么?

4

3 回答 3

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。

您的 ruby​​ 支持的编码列表可以在 irb 中使用以下命令查看:

puts Encoding.list.map(&:to_s).sort
于 2012-04-07T12:38:41.413 回答
0

尝试设置

# encoding: utf-8  

在 ruby​​ 文件的顶部。或者

export RUBYOPT=-Ku 

在 rails s 之前

于 2012-04-07T11:23:44.487 回答
0

如果您对输入文件的编码一无所知,您可以尝试ensure_encoding

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

于 2012-07-28T10:37:01.000 回答