无法使用JRuby&amp ;;正确地将CSV(中文UTF-8)文件导入数据库。 “CSV”

时间:2011-10-18 14:29:03

标签: csv utf-8 jruby cjk

使用 jruby 1.6.4(ruby-1.9.2-p136)

CSV文件具有UTF-8编码。 内容通常用TextMate显示。

尝试这一点,但我得到的是插入数据库的乱码文本。

CSV.foreach(data_file_path, :headers=>false, :encoding=>"UTF-8", :col_sep=>"^") do |row|
    # parse and write to DB
end

一些irb信息:

irb(main):001:0> puts "你好"
你好
=> nil
irb(main):002:0> puts RUBY_VERSION
1.9.2
=> nil
irb(main):003:0>

这些工作:

jruby -e 'puts "你好"'
jruby --1.9 -e 'puts "你好"'
jruby -Ku -e 'puts "你好"'

使用相同的设置,我设法将土耳其字符插入数据库。所以,问题不像Ruby to DB编写问题。

我怀疑问题出在CSV库中,自v1.9.2以来它是Ruby的一部分(它曾经是一个名为fasterCSV的外部库),因为我可以在读取文件后输出到文件到控制台。 / p>

我也尝试在代码片段的顶部插入#encoding:utf-8。

1 个答案:

答案 0 :(得分:1)

当CSV包含unicode字符时,“CSV.foreach”(Jruby 1.6.4和1.6.5)中存在unicode编码问题。作为解决方法,您可以使用“CSV.open”而不是“CSV.foreach”。

reader = CSV.open(file, "r")
reader.each do |row|
    # do something 
end

报告此错误,似乎在Jruby 1.7中得到解决 http://jira.codehaus.org/browse/JRUBY-6266