阅读您的评论后,听起来更合理。我只是不确定您是否打算像这样编码兆字节的数据。
我建议按照奥利弗(Oliver)的建议,通过从培根的密码中借用一个页面来提高数据密度,监狱团伙经常使用该页面以两种不同的脚本样式(通常是大写或小写)编写隐藏消息中的隐藏消息。小写字符或印刷与草书字符,例如
Hey mOM, WHAT's FOR diNNeR TODAY? = ABBBA AAAAA BAAAB BAABA AAAAA
= P A S T A
但是,由于您的目标不是字形学,您只需使用它来扩展字形集。这样做,仅使用印刷和草书字母数字字符就可以拥有多达114个字形,或者使用双字符编码可以拥有12996个代码点。
但是,由于所有的大于15且小于256的字形计数对于二进制数据的直接密码本质上是相同的(意味着,您仍然需要2个字符来表示每个字节,因此,每个字符中的数据密度为4位所有情况下),您都可以使用额外的98个字形/ 12740代码点进行错误检测/纠正。
做到这一点的方法包括:
- 从256个最容易读/写的字符组合中选择一组。如果出现任何其他字符组合,则说明这是复制错误。
- 使用两个版本的结束字符作为奇偶校验位。
创建50个不同的16个字符的字形集。然后,您可以使用它们对纠错数据进行加密编码。
例如,{set 1}{set 1}
表示接下来的3个半字节等于0x000
,{set 1}{set 2}
等于0x001
等。
您可以使用它来表示4096个1.5字节值中的2500+。同样,您可以仅使用16个集合来表示后续字节的所有值,从而在不增加编码数据长度的情况下提供了100%的冗余。
另外,您可以使用额外的字形进行额外压缩:
- 通过选择98个单字符代码点来实现可变宽度编码。这将使平均编码内容大小减少大约20%。
- 通过使用不同的字形集或字形集组合来表示重复的半字节/字节,可以实现类似于游程长度编码的功能。例如
Ab
= aba
; aB
= abab
; AB
= ababab
...
- 使用多余的字形或代码点表示在数据中重复的“单词”和“短语”。尽管预压缩的数据可能具有很高的熵,但是我不知道这种方法的有效性。
为了进一步减少复制错误,我将以网格线显示编码后的内容,然后复制到绘图纸上。如果您可以使用具有交替的列/行颜色的自定义固定器或带有字母列和编号行的棋盘式方格网格来快速查找,则可以进一步提高复印精度。
您还可以将交替的网格布局与交替的字符样式结合起来,作为错误检测的简便形式。即,如果奇数列总是大写,如果抄写员发现自己在奇数列中写小写字母,则他们知道自己犯了一个错误,可以开始回溯以查看发生了什么。
虽然如果您的首要任务是准确性,那么我将使用二进制编码+
汉明码。在标准方格纸上使用(12,8)缩短的汉明代码,您可能只适合187字节,仅编码124字节的数据。但是它可以非常快速地转录(斜杠为1,0为零),并提供单个错误纠正。附加一个奇偶校验位(13、8)将提供SECDED(单错误校正,双错误检测)。使用(15、11)或(31、26)之类的标准汉明码,每张纸分别具有137和156字节的数据,您可以获得更高的效率。根据您认为转录器的准确性,可以达到更高的编码率。
二进制编码也将更易于阅读(成语)和OCR / OMR。