В последнее время мы довольно часто писали о QR-коде и возможностях работы с ним в наших продуктах:


Однако, мы практически не касались технических сторон вопроса. Итак, сегодня мы поговорим о кодировке данных в QR-коде и возможных проблемах, связанных с ней.

Общий алгоритм применения кодировок

QR-код поддерживает различные режимы записи информации. Обычно алгоритм выбора режима работает следующим образом: сначала анализируются входные данные и проверяется, могут ли они быть записаны в одном из компактных режимов (Numeric, Alphanumeric, Kanji). Если не могут – используется режим Byte.

В режиме Byte входные данные кодируются с помощью одной из кодировок в списке ECI (Extended Channel Interpretation). Алгоритм по очереди проверяет каждую кодировку, определяет, можно ли с ее помощью закодировать все символы входных данных. Если ни одна не подходит – используется универсальная кодировка «UTF-8».

Это все делается для того, чтобы штрих-код имел как можно меньший размер, так как в режиме UTF-8 штрих-код имеет максимально большой размер.

Список кодировок стандарта ECI, которые поддерживаются в нашем продукте для QR-кода (в порядке использования):

  • "Cp437";
  • "ISO-8859-1";
  • "ISO-8859-2";
  • "ISO-8859-3";
  • "ISO-8859-4";
  • "ISO-8859-5";
  • "ISO-8859-6";
  • "ISO-8859-7";
  • "ISO-8859-8";
  • "ISO-8859-9";
  • "ISO-8859-11";
  • "ISO-8859-13";
  • "ISO-8859-15";
  • "Shift_JIS";
  • "Windows-1250";
  • "Windows-1251";
  • "Windows-1252";
  • "Windows-1256";
  • "UTF-8".
Примечание: для JS-версии поддерживается меньшее количество кодировок (это связано с техническими ограничениями технологий):

  • "ISO-8859-1";
  • "Windows-1250";
  • "Windows-1251";
  • "Windows-1252";
  • "Windows-1256";
  • "UTF-8".

Проблема неверной кодировки

Разные устройства для чтения штрих-кодов могут поддерживать разные наборы кодировок для декодирования QR-кодов. Например, сканеры штрих-кодов в некоторых странах поддерживают только определенные кодировки, наиболее используемые в этой стране.

Также, многие мобильные приложения для чтения штрих-кодов поддерживают только определенные кодировки, а некоторые приложения вообще не поддерживают стандарт ECI.

К счастью, в последнее время, большинство сканеров способны обработать кодировку UTF-8.

Некоторые кодировки в этом списке похожи. Например, ISO-8859-5 и Windows-1251 содержат символы кириллицы. Поэтому только от входных данных зависит, какая из этих кодировок будет использована для текста. Некоторые сканеры, например, не работают с кодировкой ISO-8859-5 и требуют использования именно Windows-1251.

Решение

Когда необходимо определить кодировку, с которой будет начинаться подбор, в наших продуктах предусмотрено статическое свойство StiOptions.Engine.BarcodeQRCodeDefaultByteModeEncoding.

Например, определим кодировку Windows_1251 как первоначальную:

StiOptions.Engine.BarcodeQRCodeDefaultByteModeEncoding = Stimulsoft.Report.BarCodes.StiQRCodeECIMode.Windows_1251;

Проблема «трёх лишних символов в начале штрих-кода»

Иногда пользователи жалуются, что в начале отсканированной информации появляются лишние символы. Это не ошибка, а особенность кодирования информации в штрих-коде. Если входные данные кодируются с использованием UTF-8, то многие программы (и наш генератор отчетов) перед данными добавляет метку BOM (Byte Order Mark). Эта метка является маркером для некоторых приложений, помогает в определении кодировки. Однако не все сканеры распознают метку BOM, и тогда в начале текста появляются три лишних символа .

Решение

Для того, чтобы избежать этого и не добавлять ко входным данным метку BOM, установите опцию StiOptions.Engine.BarcodeQRCodeAllowUnicodeBOM в значение false.
Если у вас остались вопросы, свяжитесь с нами.
By using this website, you agree to the use of cookies for analytics and personalized content. Cookies store useful information on your computer to help us improve efficiency and usability. For more information, please read the privacy policy and cookie policy.