【发布时间】:2011-06-30 13:27:10
【问题描述】:
我有一个 CSV 文件,其中包含这样的行:
...,"Städtische Galerie im Lenbachhaus",...
我正在使用带有 FasterCSV gem 的 Ruby 1.8,如下所示:
FasterCSV.foreach(file, :encoding => 'u', :headers => :first_row) do |r|
as = ImportObject.create!(r.to_hash)
end
对于大多数行,它工作正常,但对于这些行,带有特殊字符的字段被截断,因此我们将“St”保存在数据库中。
我已将 $KCODE="u" 和带/不带编码选项,但无济于事。
数据库是 MySQL。
编辑:
我尝试将代码推送到 Heroku (Postgres),但现在出现新错误:
2011-02-19T17:19:01-08:00 应用 [web.1]: ActiveRecord::StatementInvalid (PGError:错误:无效字节 编码“UTF8”的序列:0xe46474
2011-02-19T17:19:01-08:00 应用 [web.1]: 提示:如果出现此错误,也可能发生 字节序列不匹配 服务器期望的编码,其中 由“client_encoding”控制。
2011-02-19T17:19:01-08:00 应用 [web.1]: :插入“import_objects”(... "title", ...) VALUES (..., 'St?dtische 伦巴赫豪斯画廊,...) 返回“id”):
:(
【问题讨论】:
-
如果您只是读取文件并直接从 Ruby 打印名称,您会得到什么?也就是说,是 Ruby 对编码感到窒息,还是只有在通过数据库后才被截断?
-
嗨@Xavier,我试过了,但不确定结果......它显示的不仅仅是St,但没有显示特殊字符,即“St?dtische Galerie Lenbachhaus” - 但是当它放入数据库时会被截断。不确定问题是由于误读文件还是未正确配置以写入文件。
-
由于 FasterCSV 大概可以很好地读取 UTF-8,我认为它不理解您的 ä 表明您的文件实际上不是 UTF-8 编码的,但是 something else...我在这一点上有点不合群,但 wuputah 有一个(第二个)答案可能会有所帮助。祝你好运!
标签: ruby string encoding csv fastercsv