我目前正在为 Windows Mobile 编写一个应用程序,它需要能够从一维条码(配置设置)中获取键值对。需要扫描的条码越少越好。样本输入:
------------------------------
| Key | Value |
------------------------------
| 12 | Söme UTF-8 Strîng |
| 9 | & another string |
------------------------------
我想到了以下算法:
1.连接键值对并使用Base64对值进行编码
所以我们会得到类似的东西12=U8O2bWUgVVRGLTggU3Ryw65uZw==&9=JiBhbm90aGVyIHN0cmluZw==
2.使用霍夫曼编码压缩数据
为此,我将使用固定的 Huffman 树,并提供以下信息来帮助我压缩数据:
-------------------------------------------
| Enties | Priority |
-------------------------------------------
| =, & | High |
| 0-9 | Medium |
| 5-bit Base64 Words (w/o 0-9) | Low |
-------------------------------------------
3. 从编码数据生成 Code 128B 条码
将 Base96 编码应用于 Huffman 算法生成的比特流,以获得可在 Code 128B 条码中使用的 ASCII 字符。根据需要将生成的字符串拆分为多个条形码。
编写这些步骤对我来说不是问题,但我想对算法的效率和设计有一些反馈。
问题
- 我是否在某处失去了更好压缩/更短字符串的潜力?
- 有没有更好的方法来压缩随机 UTF8 编码的数据?
- 我应该将动态霍夫曼表嵌入到编码数据中吗?
- 如何考虑 Code 128B 的压缩( a
0
需要的空间比 a 少&
)?