Русские буквы в QR-коде

Автор Hedron, 21 октября 2024, 11:39

« назад - далее »

Hedron

Здравствуйте!

Можно ли в QR-код закодировать русский текст?

Команда НарисоватьШтрихкод с input_mode по умолчанию (или input_mode=0 - DATA_MODE) выдаёт QR-код,, где русские буквы читаются как иероглифы.
При input_mode=1 (UNICODE_MODE) или input_mode=2 (GS1_MODE) – QR-код не выводится вообще!


MWW_Ruza

"где русские буквы читаются как иероглифы" - читаются чем? Может проблема на стороне чтения? Сканер в режиме COM, или KB- ?
Поймать строку со сканера, и просмотреть коды символов...
Я точно кодировал ШК QR c помощью Formex, когда делал карточки для клиентов для ввода телефона/мыла, там точно были русские символы, как-то проблемм не было...

MWW_Ruza

Вот, скриншот:

Как-то не было проблем, что напечатал, то и прочиталось...
Сканер Datalogic 2430, в режиме эмуляции com-порта.

MWW_Ruza

Если что - вот команда рисования ШК:

Функция ВыводКартинкиШК(Объект)
   Если ВидКД = 1 Тогда
      Сервис.НарисоватьШтрихкод(Объект, 58, СокрЛП(Почта), 1,,0);   
   Иначе   
      Сервис.НарисоватьШтрихкод(Объект, 71, СокрЛП(Почта), 1,,0);
   КонецЕсли;   
КонецФункции

Hedron

Сканировал смартфоном (как наиболее подручный аппарат для теста).
Скорее всего, дело именно в его "программе распознавания", поскольку, если в "слове" чётное количество букв, то выдаёт иероглифы, а если нечётное – выдаёт "умляуты" (что, в принципе, можно считать "русскими буквами в европейской кодировке").
Такие же "умляуты" он выдаёт и при сканировании вашего QR-кода.
Так что, можно считать, что виноват сам сканер  :-)

Но, в любом случае, в команде НарисоватьШтрихкод при использовании input_mode=1 (UNICODE_MODE), если в строке кодирования используются русские буквы, то QR-код не выводится вообще.

Hedron

Так, с input_mode=1 (UNICODE_MODE), похоже, тоже разобрался: в этом режиме текст для QR-кода уже изначально должен быть в формате UTF-8 – тогда QR-код формируется.

Тогда вопросов больше нет!  :-)

MWW_Ruza

Ну, и отлично.  :)

А это: "НарисоватьШтрихкод при использовании input_mode=1 (UNICODE_MODE), если в строке кодирования используются русские буквы, то QR-код не выводится вообще."
Действительно так, проверил. ШтрихКод не выводится, но и ошибки нет. Используемая ранее, до того как формекс научился рисовать ШтрихКоды библиотека ОквитаБаркоде, на основе той-же zint, вышибала 1С в такой ситуации напрочь, в критическую ошибку с закрытием программы, формекс более лоялен - просто не выводит :)

MWW_Ruza

Попробовал сейчас ради интереса свой ШК с экрана:

"Сканировал смартфоном (как наиболее подручный аппарат для теста).
Скорее всего, дело именно в его "программе распознавания", поскольку, если в "слове" чётное количество букв, то выдаёт иероглифы, а если нечётное – выдаёт "умляуты" (что, в принципе, можно считать "русскими буквами в европейской кодировке")."

Андроид, какой-то из Ксиоми РедМи, приложение QR-сканер, распознает корректно, вывел строку по руски.

А вообще, если нужно, что-бы всегда читалось - можно тем-же формексом перекодировать строку в utf-8 и печатать с параметром 1. Должно будет везде работать.

MWW_Ruza

Попробуйте вот этот считать смартфоном:



У меня читается так-же, как и без юникодов:



Вывожу так:

Функция ВыводКартинкиШК(Объект)
   Если ВидКД = 1 Тогда
      СтрУТФ8   = Сервис.DecodeToUTF8(СокрЛП(Почта));
      Сервис.НарисоватьШтрихкод(Объект, 58, СтрУТФ8, 1,,1);   
   Иначе   
      Сервис.НарисоватьШтрихкод(Объект, 71, СокрЛП(Почта), 1,,0);
   КонецЕсли;   
КонецФункции


Hedron

Читает как: 6 знаков вопроса, пробел, 3 иероглифа, восклицательный знак.
Нет, я уже понял, что дело в самом сканере.

MWW_Ruza

Скорее, даже не сам "сканер", а приложение на смартфоне, которым сканитуете.

Злоп

Цитата: Hedron от 22 октября 2024, 20:19Читает как: 6 знаков вопроса, пробел, 3 иероглифа, восклицательный знак.
Нет, я уже понял, что дело в самом сканере.
может быть чувствительностью в настройках поиграться...

Hedron

Цитата: Злоп от 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-кода с накладной?
Ну и для нас (продавца) ничего не поменяется - наш банк будет это видеть как обычное поступление по реквизитам?


 


MWW_Ruza

А почему у Вас последним параметром 0 идет, если Вы преобразовали строку в ЮниКоде - ?
Смысл в этом? С 1 не работает?

А правовой статус? Да ни какого... Это просто Ваши внутренние "пироги" для удобства, не более того.