У меня есть строка данных размером чуть более 800 символов, которую я пытаюсь сжать, чтобы использовать в QR-коде (я хотел бы, по крайней мере, 50%, но, вероятно, был бы рад, если бы я получил ее меньше, чемсемьсот).Вот пример строки, которую я пытаюсь сжать, которая содержит 841 символ:
+hgoSuJm2ecydQj9mXXzmG6b951L2KIl0k9VGzIEtLztuWO2On9rt7DUlH0lXzG4iJ1yK0fA
97mDyclKSttIZXOxSPBf85LEN4PUUqj65aio5qwZttZSZ64wpnMFg/7Alt1R39IJvTmeYfBm
Tuc1noMMcknlydFocwI8/sk2Sje5MR/nYNX0LPkQhzyi5vFJdrndqAgXYULsYrB3TJDAwvgs
Kw9C5EJnrlqcb21zg17O2gU/C8KY0pz9RPzUl1Sb0rCP8iZCeis4YbQ5tuUppOfnO/X0Mosv
SOQJ/bF9juKW8ocnQvNjsNxGV1gPkWWtiU2Old7Qm7FLDqL6kQKrq356yifs0NiMVGdvAg32
eugewuttCugoZASYOpQdwPu1jMxVO1fzF3zEy5w6tDlcfA2DZwa+un9/k8XZWAO/KVExy68q
UtVRQxsIOKgpl/2tNw5DBAKbykKIkmizbsA2xtzqnYqld4kOdNMJh3YjlqWF9Bt8MZo7a+Q6
jgayr2rjpyIptc599DGtvp68ZNQ64TKNmiMnnyGMo3E+xW34G3RrsYnHGm+xJoLKoOJhacDu
oZke1ycJgQv+Y61WPrvtFOVBxV5rvSzO0+8px5AWN3uCrrw1RmT5N14IVhh6BOtRjsifqIB2
dAKxzBNsvbXm1SzkuyqYiMnp5ivy3m2mPwc9GLsykx0FRIkhCYO8ins9E5ot9QvVnE155MFA
8FVwsP5uNdOF4EzQS2/h2QK3zb5Yq4Nftlo605Dd5vuVN/A7CUN38DaAKBxDKgqDzydfQnZw
R0hTfMHNLgBJKNDSpz2P6almGlUJtXT6IYmzuU2Iaion8ePG
Я уже пробовал следующие три библиотеки:
- Встроенный .NET GzipStream
- DotNetZip, в том числе
- LZMA SDK из 7-zip
Я столкнулся с проблемой, когда сжатие фактически делает строку длиннее .Насколько я понимаю, у DeflateStream было меньше всего накладных расходов, но он все еще добавляет символы.Используя DotNetZip, я сказал ему использовать максимальное сжатие:
Imports Ionic.Zlib
Shared Function CompressData(data As Byte()) As Array
Dim msCompressed As MemoryStream = New MemoryStream
' I'm not sure if the last parameter on this next function should be
' true (for LeaveOpen), but it doesn't seem to affect it either way.
Dim deflated As DeflateStream = New DeflateStream(msCompressed, _
CompressionMode.Compress, CompressionLevel.BestCompression, True)
' Write data to compression stream (which is linked to the memorystream)
deflated.Write(data, 0, data.Length)
deflated.Flush()
deflated.Close()
Return msCompressed.ToArray
End Function
Я только думаю, что это будет ухудшаться, поскольку у меня будет даже больше данных.Есть ли лучший алгоритм сжатия для строк такой длины?Сжатие обычно работает только на более длинных строках?К сожалению, данные таковы, что я не могу использовать автономные символы для фрагментов данных.
Кроме того, могу ли я использовать буквенно-цифровую кодировку для QR-кода или мне нужно использовать двоичный код?Не думаю, что смогу, по http://www.qrme.co.uk/qr-code-forum.html?func=view&catid=3&id=324,, но я бы хотел убедиться.
Спасибо за вашу помощь!