Страницы

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

четверг, 23 января 2020 г.

Печать на русском. Принтер TG2480H. VS2013

#cpp #visual_studio #visual_cpp #принтер


Всем привет! Нужна ваша помощь 

Уже 4 дня как я пытаюсь напечатать текст на русском языке но все четно.
В принтере используется протокол ESC/POS. Работает через компорт. С горем пополам
я нашел класс-обвертку для компорта и научился отправлять команды. И все бы хорошо,
но как только дело дошло до русского языка - работа встала. Перечитав протокол я наткнулся
на команду "Set charecter code table", что дает возможность выбирать кодировки в самом
принтере для правильного отображения языков. Одним из параметров была кодировка РС866,
которая и указывает на кириллицу. При подключении этой кодировки должен был заработать
русский, но на печати снова появились кракозяблики. Открыв таблицу СР866 я увидел,
что эти кракозяблики являются частью таблицы. Взяв коды букв из этой таблицы и отправив
их на печать я все таки получил русский язык. А если взять и сравнить коды, например
букв 'A', то разница между ними будет - 64. (код 'A' С++ = 192, 'A'CP866 = 128). Интересно
то, что при использовании кодировки СР866 для консоли (setConsoleCP, setConsoleCPOut)
отображается нормальный русский текст, а при выводе на принтер получаем кракозяблики.

Подскажите, может нужно как-то еще обработать текст? Почему кодировки не совпадают?
    


Ответы

Ответ 1



Кодовая таблица, используемая «в C++» определяется кодировкой файлов исходных кодов. Скорее всего, Visual Studio сохраняет эти файлы с использованием Windows 1251. Следовательно: либо укажите Visual Studio использовать кодировку CP866, либо укажите принтеру использовать Windows 1251.

Ответ 2



Просто после main() напиши setlocale(LC_ALL, "Russian");

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

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