【发布时间】:2021-03-19 07:30:03
【问题描述】:
对于这个问题,请假设python,但不一定重要。
假设你有一个任意的 ASCII 字符串,例如:
jrioj4oi3m_=\.,ei9#
保留大量细节,我需要将此字符串作为“标签”传递给另一个程序,但该程序不支持包含“特殊字符”或偶数的“标签”。所以我试图将一个 ASCII 字符串编码成一个使用任意 ASCII 子集的字符串。
一个非常幼稚的解决方案是将原始字符串转换为二进制,然后将 0 转换为“a”,将 1 转换为“b”。这可以解决我的问题,但我想在这里学习更好的解决方案,成为更好的程序员。
首先,这个问题到底叫什么?
这不完全是散列问题,因为 IIRC 散列通常涉及编码为比原始字符串短的字符串,并且涉及冲突。
我需要 no 冲突,我并不关心编码字符串有多长,只要它比简单的情况短。 (理想情况下,这将是给定子集的最短长度)
事实上,最好明确指定允许的字符集是什么,然后使用通用编码算法进行编码。
也很高兴知道解码。
【问题讨论】:
-
您可以将您的输入视为 Base-N 中的数字(如果您允许完整范围的 ASCII 字符,则 N 为 128,如果您进一步限制输入,则小于该数字)和输出为 Base-M (M 是标签允许的字符数)。这就是 Base64 编码背后的基本思想(N 为 256,M 为 64)。
标签: python string encoding ascii decoding