无法使用 JRuby & 正确将 CSV(中文 UTF-8)文件导入数据库“CSV”
使用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 到 DB 的写入问题。
我怀疑问题出在 CSV 库上,它是 Ruby 自 v1.9.2 以来的一部分(它曾经是一个名为 fastCSV 的外部库),因为我可以在读取文件后将文件输出到控制台。
我还尝试在代码段的顶部插入 #encoding:utf-8 。
Using jruby 1.6.4 (ruby-1.9.2-p136)
The CSV file has UTF-8 encoding.
Contents shown normally with TextMate.
Trying this but all I get is garbled text inserted into DB.
CSV.foreach(data_file_path, :headers=>false, :encoding=>"UTF-8", :col_sep=>"^") do |row|
# parse and write to DB
end
Some irb info:
irb(main):001:0> puts "你好"
你好
=> nil
irb(main):002:0> puts RUBY_VERSION
1.9.2
=> nil
irb(main):003:0>
These work:
jruby -e 'puts "你好"'
jruby --1.9 -e 'puts "你好"'
jruby -Ku -e 'puts "你好"'
With the same settings, I managed to insert Turkish characters into DB. So, the problem is not like a Ruby to DB writing issue.
I suspect that the problem is with the CSV library, which is a part of Ruby since v1.9.2 (It used to be an external lib called fasterCSV) because I can output to file to console after I read the file.
I also tried inserting #encoding:utf-8 at the top of the code piece.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
当 CSV 包含 unicode 字符时,“CSV.foreach”(Jruby 1.6.4 和 1.6.5)中存在 unicode 编码问题。作为解决方法,您可以使用“CSV.open”而不是“CSV.foreach”。
这个 bug 已被报告并且似乎在 Jruby 1.7 中得到了解决
http://jira.codehaus.org/browse/JRUBY-6266
There is a unicode encoding problem in "CSV.foreach" (Jruby 1.6.4 and 1.6.5) when CSV contains unicode characters. As a workaround you can use "CSV.open" rather than "CSV.foreach".
This bug is reported and seems to be solved in Jruby 1.7
http://jira.codehaus.org/browse/JRUBY-6266