Здравствуйте!
Можно ли в QR-код закодировать русский текст?
Команда НарисоватьШтрихкод с input_mode по умолчанию (или input_mode=0 - DATA_MODE) выдаёт QR-код,, где русские буквы читаются как иероглифы.
При input_mode=1 (UNICODE_MODE) или input_mode=2 (GS1_MODE) – QR-код не выводится вообще!
"где русские буквы читаются как иероглифы" - читаются чем? Может проблема на стороне чтения? Сканер в режиме COM, или KB- ?
Поймать строку со сканера, и просмотреть коды символов...
Я точно кодировал ШК QR c помощью Formex, когда делал карточки для клиентов для ввода телефона/мыла, там точно были русские символы, как-то проблемм не было...
Вот, скриншот:
(https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/h-586.jpg)
Как-то не было проблем, что напечатал, то и прочиталось...
Сканер Datalogic 2430, в режиме эмуляции com-порта.
Если что - вот команда рисования ШК:
Функция ВыводКартинкиШК(Объект)
Если ВидКД = 1 Тогда
Сервис.НарисоватьШтрихкод(Объект, 58, СокрЛП(Почта), 1,,0);
Иначе
Сервис.НарисоватьШтрихкод(Объект, 71, СокрЛП(Почта), 1,,0);
КонецЕсли;
КонецФункции
Сканировал смартфоном (как наиболее подручный аппарат для теста).
Скорее всего, дело именно в его "программе распознавания", поскольку, если в "слове" чётное количество букв, то выдаёт иероглифы, а если нечётное – выдаёт "умляуты" (что, в принципе, можно считать "русскими буквами в европейской кодировке").
Такие же "умляуты" он выдаёт и при сканировании вашего QR-кода.
Так что, можно считать, что виноват сам сканер :-)
Но, в любом случае, в команде НарисоватьШтрихкод при использовании input_mode=1 (UNICODE_MODE), если в строке кодирования используются русские буквы, то QR-код не выводится вообще.
Так, с input_mode=1 (UNICODE_MODE), похоже, тоже разобрался: в этом режиме текст для QR-кода уже изначально должен быть в формате UTF-8 – тогда QR-код формируется.
Тогда вопросов больше нет! :-)
Ну, и отлично. :)
А это: "НарисоватьШтрихкод при использовании input_mode=1 (UNICODE_MODE), если в строке кодирования используются русские буквы, то QR-код не выводится вообще."
Действительно так, проверил. ШтрихКод не выводится, но и ошибки нет. Используемая ранее, до того как формекс научился рисовать ШтрихКоды библиотека ОквитаБаркоде, на основе той-же zint, вышибала 1С в такой ситуации напрочь, в критическую ошибку с закрытием программы, формекс более лоялен - просто не выводит :)
Попробовал сейчас ради интереса свой ШК с экрана:
"Сканировал смартфоном (как наиболее подручный аппарат для теста).
Скорее всего, дело именно в его "программе распознавания", поскольку, если в "слове" чётное количество букв, то выдаёт иероглифы, а если нечётное – выдаёт "умляуты" (что, в принципе, можно считать "русскими буквами в европейской кодировке")."
Андроид, какой-то из Ксиоми РедМи, приложение QR-сканер, распознает корректно, вывел строку по руски.
А вообще, если нужно, что-бы всегда читалось - можно тем-же формексом перекодировать строку в utf-8 и печатать с параметром 1. Должно будет везде работать.
Попробуйте вот этот считать смартфоном:
(https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/h-587.jpg)
У меня читается так-же, как и без юникодов:
(https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/h-588.jpg)
Вывожу так:
Функция ВыводКартинкиШК(Объект)
Если ВидКД = 1 Тогда
СтрУТФ8 = Сервис.DecodeToUTF8(СокрЛП(Почта));
Сервис.НарисоватьШтрихкод(Объект, 58, СтрУТФ8, 1,,1);
Иначе
Сервис.НарисоватьШтрихкод(Объект, 71, СокрЛП(Почта), 1,,0);
КонецЕсли;
КонецФункции
Читает как: 6 знаков вопроса, пробел, 3 иероглифа, восклицательный знак.
Нет, я уже понял, что дело в самом сканере.
Скорее, даже не сам "сканер", а приложение на смартфоне, которым сканитуете.
Цитата: Hedron от 22 октября 2024, 20:19Читает как: 6 знаков вопроса, пробел, 3 иероглифа, восклицательный знак.
Нет, я уже понял, что дело в самом сканере.
может быть чувствительностью в настройках поиграться...
Цитата: Злоп от 23 октября 2024, 11:28может быть чувствительностью в настройках поиграться...
Нет, само приложение менять надо.
Но это неважно, поскольку всё равно сканировать будем не смартфоном, а мини-ТСД.
Цитата: MWW_Ruza от 22 октября 2024, 09:54Вывожу так:
О! Спасибо!
А то я как-то пыкнулся qr вывести, он пустой и пустой. Оставил. А теперь попробовал - всё отлично. Русские буквы нормально выводятся, символ "№" тоже читается.
ТипКода=58;//58 - QRCODE
ЗначениеКода=Сервис.DecodeToUTF8(ТекстВывода);//в УТФ-8
ПрятатьТест=1;//не печатать на штрих-коде читаемый текст?
Input_Mode=0;//0 - DATA_MODE
Сервис.НарисоватьШтрихкод(Объект, ТипКода, ЗначениеКода, ПрятатьТест,,Input_Mode);
Сваял qr-код на оплату для одного заказчика - хочу ИПшникам на накладной печатать. Сбербанк-Онлайн считывает, создает запрос на оплату, все хорошо.
Только мне непонятен правовой статус всех этих дел.
Код, который я сделал по ГОСТ Р 56042-2014 (на ST который начинается, в платежках на коммуналку он, например) - никакого отношения к СБП и прочим НСПК не имеет, правильно? Это просто для упрощения считывания платежных реквизитов через банк-онлайн, чтобы ИПшнику не надо было платежку ваять руками в банковской программе, а создать эту платежку сканированием моего qr-кода с накладной?
Ну и для нас (продавца) ничего не поменяется - наш банк будет это видеть как обычное поступление по реквизитам?
А почему у Вас последним параметром 0 идет, если Вы преобразовали строку в ЮниКоде - ?
Смысл в этом? С 1 не работает?
А правовой статус? Да ни какого... Это просто Ваши внутренние "пироги" для удобства, не более того.
Цитата: MWW_Ruza от 23 октября 2024, 22:38А почему у Вас последним параметром 0 идет, если Вы преобразовали строку в ЮниКоде - ?
Смысл в этом? С 1 не работает?
Да, не работает. В том то и была изначально у меня проблема - выводило просто пустое белое поле, я и не стал разбираться. А вторая проблема - текст как оказалось должен быть в UTF-8, в противном случае просто считывания не происходит и всё.
Обсуждение: https://1cpp.ru/forum/YaBB.pl?num=1427365326
Формекс 2.0.5.198, вывожу ТипКода=58;// - QRCODE, считываю телефоном через Kaspersky QR Scanner
Пробежался циклом по Input_Mode=0 по 4:
Код считываемый: 0 - DATA_MODE, 3 - KANJI_MODE, 4 - SJIS_MODE
Кода нет: 1 - UNICODE_MODE, 2 - GS1_MODE
Код считываемый: Сервис.DecodeToUTF8(ТекстВывода); // UTF-8
Код несчитываемый: СокрЛП(ТекстВывода);
ПрятатьТест - никак не изменяла вывод QR кода - может для каких-то других кодов нужна?
eci - не указывал (eci=22 не меняло вывод).
Цитата: Харлампий Дымба от 23 октября 2024, 18:22ПрятатьТест=1;//не печатать на штрих-коде читаемый текст?
Здесь всё наоборот: 0 – НЕ ПЕЧАТАТЬ текст штрих-кода, 1 - печатать.
Думаю, лучше поставить 0 (прятать текст) поскольку сбой при выводе QR-кода, возможно, могут вызвать некорректные символы при выводе обычного читаемого текста (особенно в UTF-8).
Цитата: Hedron от 24 октября 2024, 18:40Здесь всё наоборот: 0 – не печатать текст штрих-кода, 1 - печатать.
Так в том-то и дело, что, независимо от значения этого реквизита, никакого текста с QR-кодом у меня не печатается. Может она работает только для каких-то особых <ТипКода>?
Цитата: Харлампий Дымба от 24 октября 2024, 18:54Может она работает только для каких-то особых <ТипКода>?
Думаю, эта опция будет работать для штрих-кодов (типа EAN-13). Навскидку: срабатывает, когда ТипКода: 9, 20, 60.
Тогда тем более, для вывода QR-кодов ПрятатьТест лучше ставить 0.
Ну как-бы куер можно запихнуть достаточно много инфы (вроде как до 2К) - вы как планируете столько инфы печатать такой "текст штрихкода"...?
Предпочтительным является написание "штрихкод", без дефиса.