2010-04-23 3 views
1

Я хочу экспортировать некоторые данные из моего JRuby на рельсы веб-приложение, чтобы преуспеть, поэтому я создаю строку CSV и отправить его в качестве загрузки для клиента с помощьюконвертировать jruby 1.8 строку в кодировку Windows?

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 вручную с помощью значка, он работает.

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

Im помощью: - JRuby 1.3.1 (рубин 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

Редактировать: Нужно ли включать какой-то камень для использования iconv?

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

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

Спасибо, S.Mark за этот ответ.

ответ

1

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

Примечание: Мастер Импорт текста в Excel, как представляется, работать с UTF-8 тоже

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

В соответствии с этим, добавление знака спецификации (знак байтового знака) в CSV будет всплывать в Excel Import Import Wizard, поэтому вы можете использовать его для работы.

+0

Моя проблема в том, что я не могу преобразовать текст вообще. Таким образом, UTF-16 не является вариантом. Спасибо за обходной путь. Я попробую его сейчас и воспользуюсь, когда план A не удастся. К сожалению, требуя, чтобы пользователи правильно выбрали кодировку, нужно больше усилий по обучению и много работы для поддержки, чтобы объяснить это ... – Arne

+1

@ Арне, я просто попробовал тестировать Iconv с UTF16le таким образом, 'Iconv.new ('UTF -16LE ',' UTF-8 ') ', преобразование работает на irb, вы также можете проверить это. Обратите внимание, что 'UTF-16LE' и' UTF-16' отличаются друг от друга, 'UTF-16' имеет подпись BOM. – YOU

+0

Это сработало! Большое спасибо за Вашу помощь. Я высоко ценю это. Я пошлю его в своем OP, чтобы другие поняли. – Arne

0

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

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

Да, он дает тот же результат. Это совсем не конверсия. – Arne

+0

это сработает для вас? чем отличается ваша установка? – Arne

+0

Странно, мне придется проверить и вернуться к вам. –

Смежные вопросы