2011-10-18 40 views
0

使用的JRuby 1.6.4(紅寶石-1.9.2-P136)無法導入CSV(中國UTF-8)文件到DB正確使用JRuby和 「CSV」

的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到數據庫寫入問題。

我懷疑問題在於CSV庫,自從v1.9.2(它曾經是一個名爲fasterCSV的外部庫)以來,它就是Ruby的一部分,因爲我可以在讀取文件後將文件輸出到控制檯。

我也嘗試在代碼塊的頂部插入#encoding:utf-8。

回答

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 

這個bug報告,似乎在JRuby的1.7 http://jira.codehaus.org/browse/JRUBY-6266

來解決