Мой запрос на получение ответа был применен . ZBar версия 0.23.1 и новее смогут декодировать двоичные QR-коды:
zbarimg --raw --oneshot -Sbinary qr.png
zbarcam --raw --oneshot -Sbinary
QR-коды имеют несколько режимов кодирования. Простейшим, наиболее часто используемым и широко поддерживаемым является кодировка alphanumeri c, которая подходит для простого текста. Байтовое кодирование позволяет хранить произвольные 8-битные данные в QR-коде. Режим ECI подобен 8-битному режиму, но с дополнительными метаданными, которые сообщают декодеру, какой набор символов использовать для декодирования двоичных данных обратно в текст. Вот список известных значений ECI и кодировок символов, которые они представляют. Например, когда декодер обнаруживает QR-код в режиме ECI 26, он знает, что декодирует двоичные данные как UTF-8.
Инструмент qrencode
выполняет свою работу правильно: создание QR-кода в байтовом режиме с данными, которые вы указали в качестве содержимого. Проблема в том, что большинство декодеров были специально разработаны для обработки текстовых данных в первую очередь. Извлечение необработанных двоичных данных - в лучшем случае подробность.
В текущих версиях библиотеки zbar
QR-коды в байтовом режиме будут обрабатываться так, как если бы они были неизвестными QR-кодами в режиме ECI. Если набор символов не указан, он попытается угадать кодировку и преобразовать в нее данные. Это, скорее всего, искажает двоичные данные. Как вы заметили, я поднял этот вопрос в выпуске # 55 и через некоторое время смог отправить запрос на извлечение , чтобы улучшить это. В случае слияния библиотека будет иметь опцию декодера binary
, которая будет указывать декодерам возвращать необработанные двоичные данные без их преобразования. Другим источником искажения данных является тенденция инструментов командной строки добавлять строки к выводу. Я отправил запрос на извлечение , чтобы пользователи могли предотвратить это, и он уже объединен.
Библиотека zxing-cpp
также попытается угадать кодирование двоичных данных в QR-кодах. В комментариях предполагается, что спецификация QR-кода требует, чтобы декодеры выбирали кодировку без указания значения по умолчанию или не позволяли им возвращать необработанные двоичные данные. Чтобы сделать это возможным, двоичные данные копируются в байтовый массив , к которому можно получить доступ через DecoderResult
. Когда у меня есть свободное время, я намереваюсь написать zximg
и zxcam
инструменты с поддержкой двоичного декодирования для этой библиотеки.
Всегда можно кодировать двоичные данные как базы 64 и закодируйте результат как алфавитный код c QR. Однако кодировка base 64 увеличивает размер данных, а режим alphanumeri c не позволяет использовать максимальную емкость QR-кода. В комментарии вы упомянули, для чего вы собираетесь использовать двоичные QR-коды:
Я хочу иметь пакет для эффективного выгрузки некоторых файлов gpg в формате, который облегчает восстановление.
Это именно тот случай использования, который я пытаюсь включить с помощью своего запроса на извлечение: более легкий для восстановления paperkey . 4096-битные секретные ключи RSA могут быть непосредственно QR-кодированы в 8-битном режиме, но не в режиме alphanumeri c как данные, закодированные в 64-значном формате.