#java #кодировка #кириллица
взял код отсюда http://www.mets-blog.com/java-pos-thermal-printer-example/ там смущает вот эта строка bytes = text.getBytes("CP437"); в других кодировках крякозябры в общем как заставить печатать кириллицу?
Ответы
Ответ 1
Наверное все носители тайного знания как заставить печатать туповатый принтер кириллицу просто тупо вымерли и я остался один. А ведь были золотые времена в святые 90-е это была вообще золотая тема :) В принтере в евонной памяти содержится некая таблица, в которую загружены шрифты и где напротив байта - стоит его буквенное изображение. Когда принтеру приходит команда печатать байт, он берет байт с ним идет в таблицу извлекает оттуда символ и посылает сигнал своим головкам изобразить символ. Соответственно, задача прогера состоит в том, чтобы шрифты загруженные в память принтера получали правильные байты (кодировка) или же если нет шрифтов загрузить таковые в принтер. Обычно это задача драйвера - драйвер берет на себя эту непосильную задачу. Соответственно, задача распадается в нашем случае на 2 части: Загрузка шрифтов - зависит от модели принтера, обычно в мануале подробно описывается сей процесс (или решается тупо установкой драйвера). В тупых моделях принтеров бывает загружен только 1 шрифт с кодировкой CP-437 (US) Перекодировка байтов (если требуется - зависит от кодировки шрифта) В общем давайте модель принтера - оттуда и будем плясать. Update В мануале расписаны ESC коды управления принтером. По идее, это все должен делать драйвер, но можно и самому. Вам надо сначала перед печатью выставить кодовую страницу, что достигается следующей ESC последовательностью: ESC t n По простому надо в порт принтера записать три байта: 0x1B 0x74 0x11 //байты приведены в HEX (ESC t 17) После чего надо посылать ваш текст, но уже в кодировке KOI-8 Рекомендуется перед этим проинициализировать принтер посылкой команды ESC @Ответ 2
Кодировка CP437 не содержит кирилицы. Если у вас символы кирилицы закодированны например в русскую кодировку CP1251 или КОИ-8, то на выходе у вас получится набор байт, который нельзя показать ввиду сказанного выше. Поэтому вам скорее всего надо декодировать в другую кодировку, содержащую кирилицу. Но возможен вариант трансфера где декодированные байты можно обратно закодировать с помощью того же CP437 и в результате у вас получится строка в прежней кодировке.
Комментариев нет:
Отправить комментарий