字符串压缩算法

4
我需要使用连接的对象属性来生成QR码。由于这些字符串可能很长,因此我想知道在我的字符串长度介于25到100+个字符之间时应使用哪种压缩算法。

提前感谢您的帮助,

Jerec


你的字符串中可以出现哪些字符? - Robin Green
对象属性来自有限集合吗?如果是这样,最好使用ID代替长字符串。ID可以进一步压缩,但首先使用它们可能会带来最大的好处。 - b.buchhold
对象属性有限,但可以有无限数量的对象。实际上,我将存储ID和可能一个Double。 - Jerec TheSith
1
你能给出这种QRCode字符串的例子吗? - Christian Ammer
这里有一个例子:14523;67548;46578;22164;78425;46167;6;17962;449,4,所以有6个ID,显示在前面的ID数,另一个ID和价格。我使用“;”作为分隔符,但如果有更好的方法,请告诉我 ;) PS:很抱歉没有早些回复,谢谢你的帮助。 - Jerec TheSith
2个回答

0

我假设你在存储字符串之前会使用压缩,因此这些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",可以查找相应的值。


谢谢您的回复,我认为如果按照您的建议存储这些信息,我大约有30个以上的5位元素,QR码的分辨率将会比平常更高。但如果我提高误差校正级别,就不应该会有任何问题。 - Jerec TheSith
请确保编码一个指向实际数据的固定宽度URI。 - Jeremy Gray

0

编码QR码所用的算法取决于您编码的数据类型。请参见http://www.swetake.com/qr/qr1_en.html

例如,如果您知道每个ID都具有相同数量的数字,并且因此可以将它们直接连接而不使用标点符号,则可以将它们编码为纯数字,每三个字符将使用10位。

如果您需要某种分隔符,如果使用了“0-9A-Z $%*+-./:”中的内容,则仍将保持字母数字,并在11位中获得2个字符。

如果给定任意数据(请注意,这包括任何小写字母:上面的列表不包括小写字母),则将使用8位每个字符。

因此,仅数字最终会比原始数据小60%。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接