конвертировать строку jruby 1.8 в кодировку windows? - PullRequest
1 голос
/ 23 апреля 2010

Я хочу экспортировать некоторые данные из моего jruby в rails webapp для превосходства, поэтому я создаю строку csv и отправляю ее для загрузки клиенту, используя

send_data(text, :filename => "file.csv", :type => "text/csv; charset=CP1252", :encoding => "CP1252")

Файл, похоже, в формате UTF-8, который Excel не может правильно прочитать. Я погуглил проблему и обнаружил, что iconv может конвертировать кодировки. Я пытаюсь сделать это с:

ic = Iconv.new('CP1252', 'UTF-8')
text = ic.iconv(text)

но когда я отправляю преобразованный текст, это не имеет никакого значения. Это все еще UTF-8, и Excel не может читать специальные символы. Есть несколько решений, использующих iconv, так что, похоже, это работает для других. Когда я вручную конвертирую файл в оболочке linux с помощью iconv, он работает.

Что я делаю не так? Есть ли лучший способ?

Я использую: - jruby 1.3.1 (ruby 1.8.6p287) (2009-06-15 2fd6c3d) (Java HotSpot (TM) Client VM 1.6.0_19) [i386-java] - Debian Lenny - Сервер приложений Glassfish - Iceweasel 3.0.6

Edit: Должен ли я включить немного драгоценного камня, чтобы использовать iconv?

Решение: С.Марк указал на это решение: Вы должны использовать кодировку UTF-16LE, чтобы Excel понял это, например:

text= Iconv.iconv('UTF-16LE', 'UTF-8', text)

Спасибо, С.Марк за этот ответ.

Ответы [ 2 ]

1 голос
/ 23 апреля 2010

Согласно моему опыту, Excel не может правильно обрабатывать файлы CSV UTF-8.Вместо этого попробуйте UTF-16.

Примечание : Мастер импорта текста в Excel, похоже, также работает с UTF-8

Редактировать : поиск в стекеПереполнение дает мне эту страницу, пожалуйста, посмотрите, что.

В соответствии с этим, добавление подписи BOM (Byte Order Mark) в CSV вызовет мастер импорта текста Excel, так что вы можете использоватьэто как обойти.

0 голосов
/ 23 апреля 2010

Получаете ли вы тот же результат со следующим?

cp1252= Iconv.conv("CP1252", "UTF8", text)
...