【问题标题】:Compression algorithms for Strings字符串的压缩算法
【发布时间】:2011-05-23 08:28:49
【问题描述】:

我必须使用串联对象属性生成 QRCode。这些字符串可能很长,这就是为什么我想知道使用哪种压缩算法知道我的字符串的长度在 25 到 100+ 个字符之间

提前致谢,

杰瑞克

【问题讨论】:

  • 你的字符串中可以出现哪些字符?
  • 是有限集合中的对象属性吗?如果是这样,使用 ID 代替长字符串可能会好得多。 ID 可以进一步压缩,但首先使用它们可以带来最大的好处
  • 对象属性是有限的,但对象的数量可以是无限的。事实上,我会存储 ID,也许还有一个 Double
  • 你能举出这种二维码字符串的例子吗?
  • 这里是一个例子:14523;67548;46578;22164;78425;46167;6;17962;449,4 所以6个ID,之前显示的ID数量,另一个ID和价格。我用了 ”;”作为分隔符,但如果有更好的地方,请告诉我 ;) ps:抱歉之前没有回复,谢谢你的帮助

标签: algorithm string compression qr-code


【解决方案1】:

我假设由于您要在存储这些 QR 码将无法被任何客户端读取的字符串之前使用压缩,因此它必须是您编写的应用程序(b/c 您正在存储字符未知编码,客户端将无法解码)。

让您的应用程序创建一个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>

在二维码上编码:“http://mydomain.com/790C9704-8C61-435F-991D-CDBB5767AA3D”,然后可以查找值。

【讨论】:

  • 感谢您的回复,我认为如果我按照您建议的方式存储信息并且我有大约 30+ 5 位元素,则 QRcode 的分辨率会比平时高,但是如果我提高纠错级别应该没有任何问题
  • 只要确保您正在编码一个指向您的实际数据的固定宽度的 URI。
【解决方案2】:

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

例如,如果您知道每个 id 始终具有相同的位数,因此可以将它们串在一起而无需标点符号,您可以将它们编码为纯数字,并且每三个字符使用 10 位。

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

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

所以只有数字最终会小 60%。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多