QRkoder

Байтовый режим (Byte Mode)

Режим кодирования QR-кода для произвольных бинарных данных и текста в UTF-8. Один из 4 базовых режимов ISO/IEC 18004 — самый универсальный, но менее эффективный по ёмкости.

Что такое байтовый режим QR-кода

Байтовый режим (англ. Byte Mode, иногда называют 8-bit byte mode) — один из четырёх базовых режимов кодирования данных в стандарте QR-кода ISO/IEC 18004. В этом режиме каждый символ исходных данных упаковывается в 8 бит, то есть ровно в один байт. Индикатор режима в потоке QR — четырёхбитная последовательность 0100, после которой идёт длина блока и сами данные.

Режим — самый универсальный из всех. Цифровой и буквенно-цифровой работают только с ограниченными наборами символов (0–9 и 45 ASCII-знаков соответственно), Kanji-режим — исключительно с японской кодировкой Shift JIS. Byte Mode принимает любую последовательность октетов: URL, кириллицу, спецсимволы, символы валют, полностью произвольные бинарные данные. Цена универсальности — самое затратное представление: один символ занимает целый байт, тогда как цифровой режим упаковывает 3 цифры в 10 бит.

Кодировка: ISO-8859-1 vs UTF-8

По умолчанию стандарт ISO/IEC 18004 предписывает интерпретировать байты в Byte Mode как ISO-8859-1 (Latin-1) — однобайтную кодировку для латиницы и базовых западноевропейских символов. На практике это работает только для английского текста. Для кириллицы, китайских иероглифов, эмодзи и любых не-латинских символов используется UTF-8, а декодеру об этом сообщается через специальный заголовок ECI 26 (Extended Channel Interpretation, индикатор кодировки 000026).

В реальности все современные генераторы и сканеры по умолчанию ставят и распознают UTF-8 — даже без явного ECI-заголовка большинство декодеров проверяют BOM или эвристики и выбирают UTF-8. Это упрощает работу с многоязычными данными, но имеет последствия для ёмкости: один кириллический символ в UTF-8 занимает 2 байта, эмодзи — 4 байта.

ТекстБайт UTF-8Бит в QR
hello540
привет1296
café540
cafe ☕972

Русское «привет» в QR-коде занимает в 2,4 раза больше места, чем английское «hello». Для большой коллекции данных на кириллице это означает более крупную версию QR-кода и более плотную матрицу.

Ёмкость байтового режима

Максимум Byte Mode — 2953 байта в QR-коде версии 40 при минимальном уровне коррекции ошибок L. Это абсолютный потолок стандарта для бинарных данных. На практике такие объёмы используются крайне редко: код версии 40 имеет матрицу 177×177 модулей и тяжело сканируется камерой смартфона.

ВерсияРазмерECC LECC MECC QECC H
121×211714117
537×37106846046
1057×57271213151119
2097×97858666482382
40177×1772953233116631273

Для типичных задач — короткой ссылки длиной 30–50 символов или vCard с базовыми контактами — достаточно версий 3–8. Универсальный байтовый код для русского URL длиной 60 символов укладывается в версию 4–5 при ECC уровня M, размер 33×33 или 37×37 модулей.

Когда применяется Byte Mode

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

  • URL и короткие ссылки — содержат символы, не входящие в alphanumeric-набор: маленькие буквы, ?, =, &, #, кириллицу в путях.
  • Кириллический текст — обязательно идёт через UTF-8 в Byte Mode.
  • vCard и MECARD — имена, должности и адреса содержат символы любого языка плюс пунктуацию.
  • Wi-Fi пароли — пароли часто используют символы, не входящие в alphanumeric.
  • JSON, XML, base64-данные — двоичные потоки кодируются только побайтово.

Большинство онлайн-генераторов QR, включая QRkoder, по умолчанию выбирают Byte Mode для произвольного ввода — это гарантирует, что код будет валидным независимо от содержимого. Оптимизация под цифровой или буквенно-цифровой режим включается только когда генератор автоматически определит, что весь ввод состоит исключительно из подходящих символов.

Смешанный режим и сегментация

Стандарт ISO/IEC 18004 разрешает разбивать данные на сегменты разных режимов внутри одного QR-кода. Например, ссылка «https://qrkoder.ru/promo123456789» может быть закодирована тремя сегментами: префикс «https://qrkoder.ru/promo» в Byte Mode (24 байта = 192 бита), цифры «123456789» в Numeric Mode (всего 30 бит вместо 72) и плюс служебные индикаторы режимов. Такая оптимизация даёт экономию 5–15% размера для смешанных строк и поддерживается продвинутыми библиотеками (например, nayuki/qrcodegen, ZXing core). Простые онлайн-генераторы её не делают и кодируют всё одним сегментом Byte Mode — итоговый код получается на одну версию крупнее, но абсолютно корректным и читаемым.

Связанные концепции

  • Numeric Mode — 3 цифры за 10 бит, для чисел.
  • Версия QR-кода — определяет максимальную ёмкость в байтах.
  • Ёмкость данных — общий объём кода с учётом ECC.
  • vCard — типичный кейс байтового режима.
  • Kanji Mode — 13 бит на символ, только Shift JIS — не путать с Byte Mode.

Частые вопросы

Почему кириллица занимает в QR в 2 раза больше места?

Все символы кириллицы расположены в Unicode-блоке U+0400–U+04FF, который при кодировании в UTF-8 представляется двухбайтовыми последовательностями. Один символ «А» = два байта 0xD0 0x90, «р» = 0xD1 0x80. В Byte Mode каждый байт занимает 8 бит, поэтому строка из 6 кириллических букв занимает 96 бит против 40 бит для 5 латинских букв. Это особенность UTF-8, а не QR-кода. Альтернативные KOI8-R или Windows-1251 дали бы один байт на символ, но эти кодировки не поддерживаются ECI и не распознаются современными сканерами.

Какая разница между Byte Mode и Kanji Mode?

Byte Mode упаковывает любые данные по 8 бит на символ. Kanji Mode — узкоспециализированный режим для японской кодировки Shift JIS: каждый японский иероглиф представляется как 13 бит вместо 16 бит, которые занял бы тот же символ в Byte Mode через UTF-8. Это даёт компактность для японских текстов, но абсолютно бесполезно для русского, английского, китайского или любого другого языка. Все не-японские данные обязательно идут через Byte Mode.

Можно ли уменьшить размер QR с кириллическим текстом?

Стандартными средствами — нет, UTF-8 всегда занимает 2 байта на кириллический символ. Реальные пути сокращения: сократить сам текст, использовать динамический QR-код (в графику пишется короткая латинская ссылка, а текст хранится на сервере и обновляется без перепечатки), либо применять смешанный режим с сегментацией для URL, содержащих и латиницу, и цифры. Для длинного текста на русском (более 200 символов) единственное практичное решение — динамический QR с короткой ссылкой.

Что такое ECI 26 в Byte Mode?

ECI (Extended Channel Interpretation) — механизм стандарта ISO/IEC 18004 для указания кодировки в потоке QR-кода. Перед сегментом данных вставляется заголовок: 4 бита индикатора ECI 0111 и номер кодировки. Значение 26 соответствует UTF-8. Также используются ECI 1 (CP437), ECI 3 (ISO-8859-1), ECI 9 (ISO-8859-7, греческий). Современные сканеры распознают UTF-8 и без явного ECI-заголовка по эвристикам, поэтому многие генераторы его не вставляют — это экономит 12–20 бит.

Почему генератор QR всегда выбирает байтовый режим, даже для коротких чисел?

Большинство простых онлайн-генераторов запрограммированы на максимальную совместимость и не анализируют ввод. Любая строка, включая «12345», попадает в Byte Mode целиком. Это даёт чуть более крупный код, но гарантирует корректное декодирование любым сканером. Продвинутые библиотеки (nayuki/qrcodegen, ZXing core) автоматически определяют оптимальный режим: если все символы цифровые — выбирают Numeric Mode, если попадают в alphanumeric-набор — Alphanumeric Mode, иначе — Byte Mode. Для большинства практических задач разница в размере незаметна и не стоит времени на оптимизацию.

Создавайте QR-коды бесплатно

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

Начать бесплатно
Байтовый режим QR-кода (Byte Mode) | QRkoder