Любая бесплатная библиотека Java для кодирования из Unicode в CP866?

Я пытаюсь печатать на устройстве, которое поддерживает только кодировку CP866.

К сожалению, устройство, с которого я печатаю (устройство Android), не поддерживает CP866, в результате чего "abc".getBytes("CP866") выбрасывается ошибка UnsupportedEncodingException.

Итак, я думаю, мне нужно самому кодировать Unicode в CP866. Есть ли бесплатная java-библиотека, которая делает это?


person Alexander Kulyakhtin    schedule 17.06.2013    source источник
comment
Согласно эта страница CP866 поддерживается «из коробки» при каждой установке среды выполнения Oracle Java 7. Какой JRE/JDK вы используете? Какая версия?   -  person Joachim Sauer    schedule 17.06.2013
comment
Примечание: бесплатное ПО — это... древний термин с очень специфическим значением. Вряд ли какое-либо программное обеспечение в наши дни выпускается как бесплатное. Вы вероятно ищете программное обеспечение с открытым исходным кодом или бесплатное программное обеспечение (или просто бесплатное программное обеспечение).   -  person Joachim Sauer    schedule 17.06.2013
comment
1.6, потому что мое отправляющее устройство — телефон Android   -  person Alexander Kulyakhtin    schedule 17.06.2013
comment
так что код работает на Android? Тогда, скорее всего, у них есть совершенно другой (и, вероятно, гораздо меньший) набор поддерживаемых кодировок. Почему бы просто передавать данные в кодировке UTF-8? Все поддерживают это.   -  person Joachim Sauer    schedule 17.06.2013
comment
Нет, принимающее устройство поддерживает только Cp866. Это российское устройство.   -  person Alexander Kulyakhtin    schedule 17.06.2013


Ответы (4)


http://msdn.microsoft.com/en-us/goglobal/cc305166 имеет список персонажей; если никакая готовая опция не работает, написание кода для итерации массива, переводящего символы Unicode в байты, подходящие для CP866, не должно занимать много времени.

person prosfilaes    schedule 17.06.2013
comment
Выяснилось, что я потратил на это меньше времени, чем на поиск какой-либо библиотеки. Большое спасибо! - person Alexander Kulyakhtin; 17.06.2013

Согласно документации Oracle, Cp866 является поддерживаемой кодировкой для Java 7. Так что либо

  • вы используете старую версию Java, которая не поддерживает Cp866 (например, см. комментарий @Joachim!!!), или
  • среда выполнения Java не распознает используемое вами имя. (Каноническое имя набора символов "Cp866", а не "CP866".)

ОБНОВЛЕНИЕ. Маловероятно, что последнее. Из того, что я могу разобрать из источник, механизм поиска кодировки, используемый стандартным "поставщиком", нечувствителен к регистру.

Рекомендации:

person Stephen C    schedule 17.06.2013
comment
В Java 6 это поддерживается (согласно документацию). - person Uwe Plonus; 17.06.2013
comment
Мое отправляющее устройство — это устройство Android. Есть Java 1.6. abc.getBytes(Cp866) выдает исключение. Так я использую какой-либо другой код вместо этого? - person Alexander Kulyakhtin; 17.06.2013
comment
@Alex: Android не Java 1.6. Это что-то похожее на Java (погуглите для Dalvik). Я предполагаю, что они поддерживают только небольшой набор кодировок (потому что на Android меньше устаревшей истории). - person Joachim Sauer; 17.06.2013
comment
Хм... этот вопрос связан, но не имеет полного ответа. - person Joachim Sauer; 17.06.2013

Класс java.nio.charset.Charset поддерживает как Cp866, так и, конечно, Unicode. Я думаю, вы могли бы использовать это с методами encode и decode.

person Mena    schedule 17.06.2013

Мне нужно было кодировать строку с помощью Cp866 в android. Вы можете использовать библиотеку java с составленными классами кодировки. Cp866 среди них.

Это ссылка: http://www.doc.ic.ac.uk/~awl03/cgi-bin/trac.cgi/miro/browser/trunk/gcc/libjava/classpath/gnu/java/nio/charset

Если вы хотите расширить класс Charset и добавить свой собственный Charset: Java NIO . Глава 6 Наборы символов

person Andrey Kolesnikov    schedule 23.08.2013