Страницы

Поиск по вопросам

воскресенье, 2 февраля 2020 г.

кириллица в термальном принтере

#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 и в результате у вас получится строка в прежней кодировке.

Комментариев нет:

Отправить комментарий