Не удается правильно импортировать файл CSV (китайский UTF-8) в БД с помощью JRuby & "CSV" - PullRequest
0 голосов
/ 18 октября 2011

Использование 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(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, которая является частью Ruby начиная с v1.9.2 (раньше это была внешняя библиотека, называемая более быстрым CSV), потому что я могу выводить в файл на консоль после прочтения файла. 1022 *

Я также попытался вставить #encoding: utf-8 в начале кода.

1 Ответ

1 голос
/ 11 февраля 2012

В CSV.foreach есть проблема с кодировкой Unicode (Jruby 1.6.4 и 1.6.5), когда CSV содержит символы 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...