Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Madsson
0 / 0 / 0
Регистрация: 10.06.2016
Сообщений: 2
#1

Печать на русском. Принтер CUSTOM TG2480H (VS2013) - C++

14.06.2016, 10:13. Просмотров 388. Ответов 3
Метки нет (Все метки)

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

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

Подскажите, может нужно как-то еще обработать текст? Почему кодировки не совпадают?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.06.2016, 10:13     Печать на русском. Принтер CUSTOM TG2480H (VS2013)
Посмотрите здесь:

C++ Печать на USB принтер в Win XP из консольного приложения С++ Win32?
[VS2013] Запрос к базе данных из приложения C++
C++ Vs2013 опять на чёто не понятное рукаеться
Печать из консоли на принтер C++
C++ Как в VS2013 добавить компилятор от VS2010
C++ Нету заголовочного файла в vs2013 professional
Код для консоли, написанный в RAD XE7, не работает на VS2013 C++
Запуск VS2008 проекта на VS2013 C++
C++ Перенос старого проекта с VS2003 на VS2013
Разброс значений, выводимых компилятором VS2013 и онлайн-компиляторов C++
Как перенести проект с Builder 6 на Microsoft VS2013? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
avgoor
837 / 479 / 107
Регистрация: 05.12.2015
Сообщений: 1,371
14.06.2016, 13:56     Печать на русском. Принтер CUSTOM TG2480H (VS2013) #2
Цитата Сообщение от Madsson Посмотреть сообщение
Подскажите, может нужно как-то еще обработать текст?
А кодировка сpp файла какая? Попробуйте вывести строку с четко заданными символами: char str[] = "\x95\xE3\xA9!";
Madsson
0 / 0 / 0
Регистрация: 10.06.2016
Сообщений: 2
14.06.2016, 14:16  [ТС]     Печать на русском. Принтер CUSTOM TG2480H (VS2013) #3
В общем разобрался немного. Если текст вводить в VS то он автоматически кодируется 1251 (char* text = "Тестовый текст для печати" - 1251). Соответственно, консоль(866) выводит текст в кракозяблики, что делает и принтер. Т.е. для корректной печати мне осталось перевести 1251 в 866. Но задача усложняется тем, что текст берется из файла который должен быть в кодировке UTF-8. Т.е. нужно конвектировать UTF-8 в СР866. Подскажите, как правильно это сделать. Инфо на форуме до этого не совсем понятна и разнобойна. Если можно, небольшой пример.
avgoor
837 / 479 / 107
Регистрация: 05.12.2015
Сообщений: 1,371
14.06.2016, 14:54     Печать на русском. Принтер CUSTOM TG2480H (VS2013) #4
Цитата Сообщение от Madsson Посмотреть сообщение
Если можно, небольшой пример.
C++
1
2
3
4
5
6
7
    std::string string_in_u8 = u8"Какой-то текст";
 
    typedef std::codecvt<wchar_t, char, mbstate_t> codec;
    std::wstring w = std::wstring_convert<codec>(new std::codecvt_utf8<wchar_t>).from_bytes(string_in_u8);
    std::string string_in_cp866 = std::wstring_convert<codec>(new std::codecvt_byname<wchar_t, char, mbstate_t>(".866")).to_bytes(w);
 
    std::cout << string_in_cp866;
Yandex
Объявления
14.06.2016, 14:54     Печать на русском. Принтер CUSTOM TG2480H (VS2013)
Ответ Создать тему
Опции темы

Текущее время: 01:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru