Я хочу экспортировать некоторые данные из моего 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 за этот ответ.
Моя проблема в том, что я не могу преобразовать текст вообще. Таким образом, UTF-16 не является вариантом. Спасибо за обходной путь. Я попробую его сейчас и воспользуюсь, когда план A не удастся. К сожалению, требуя, чтобы пользователи правильно выбрали кодировку, нужно больше усилий по обучению и много работы для поддержки, чтобы объяснить это ... – Arne
@ Арне, я просто попробовал тестировать Iconv с UTF16le таким образом, 'Iconv.new ('UTF -16LE ',' UTF-8 ') ', преобразование работает на irb, вы также можете проверить это. Обратите внимание, что 'UTF-16LE' и' UTF-16' отличаются друг от друга, 'UTF-16' имеет подпись BOM. – YOU
Это сработало! Большое спасибо за Вашу помощь. Я высоко ценю это. Я пошлю его в своем OP, чтобы другие поняли. – Arne