В последнее время мы довольно часто писали о 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.
Если у вас остались вопросы, свяжитесь с нами.
Используя этот сайт, вы соглашаетесь на использование файлов Cookie для аналитики и персонализированного контента. Файлы Cookie хранят полезную информацию на вашем компьютере, чтобы помочь нам повысить эффективность и удобство использования. Для получения дополнительной информации, пожалуйста, прочтите Конфиденциальность и Использование Cookie.