Алгоритмы сжатия для строк - PullRequest
4 голосов
/ 23 мая 2011

Мне нужно сгенерировать QRCodes, используя свойства объединенных объектов.Эти строки могут быть длинными, поэтому я хотел бы знать, какой алгоритм сжатия использовать, зная, что длина моей строки составляет от 25 до 100+ символов

, заранее спасибо,

Джерек

Ответы [ 2 ]

0 голосов
/ 30 мая 2011

Алгоритм, используемый для кодирования QR-кодов, зависит от типа данных, которые вы кодируете.См. http://www.swetake.com/qr/qr1_en.html.

Если, например, вы знаете, что у вас всегда одинаковое количество цифр для идентификатора и поэтому можете просто связать их вместе без знаков препинания, вы можете закодировать их как чисто числовые, и вы будете использовать10 битов на каждые три символа.

Если вам нужен какой-то разделитель, если вы используете что-то в "0-9A-Z $% * + -. /:", Вы останетесь буквенно-цифровым и получите 2символы в 11 битах.

Если вы дадите ему произвольные данные (обратите внимание, что они включают любые строчные буквы: в приведенном выше списке нет строчных букв), вы будете использовать 8 бит на символы.

Таким образом, числовое значение будет на 60% меньше.

0 голосов
/ 25 мая 2011

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

Вместо того, чтобы сжимать и хранить длинную строку в QR-коде, пусть ваше приложение создает URI (например, GUID или URL), а когда ваше приложение декодирует это URI он ищет все значения (без сжатия), которые вы хотели сохранить в QR-коде. Тогда ваше приложение может просто искать формат любым удобным для него способом.

Например, если ваше постоянное хранилище является файлом xml, но это может быть что угодно:

<URI = "http://mydomain.com/790C9704-8C61-435F-991D-CDBB5767AA3D">
    <MyElement>14523</MyElement>
    <MyElement>67548</MyElement>
    ...
    <MyElement>46167</MyElement>
</URI>

Закодировано в QR-коде: "http://mydomain.com/790C9704-8C61-435F-991D-CDBB5767AA3D", значения могут быть найдены.

...