gpt4 book ai didi

python - 将任何 ASCII 字符串唯一编码为使用 ASCII 子集的字符串

转载 作者:行者123 更新时间:2023-12-05 09:36:22 27 4
gpt4 key购买 nike

这道题,请假设是python,但不一定重要。

假设您有一个任意的 ASCII 字符串,例如:

jrioj4oi3m_=\.,ei9#

保留大量细节,我需要将此字符串作为“标签”传递给另一个程序,但该程序不支持包含“特殊字符”甚至数字的“标签”。因此,我尝试将 ASCII 字符串编码为使用 ASCII 任意子集的字符串。

一个非常天真的解决方案是将原始字符串转换为二进制,然后将 0 转换为“a”,将 1 转换为“b”。这可以解决我的问题,但我想在这里学习更好的解决方案,成为更好的程序员。

首先,这个问题到底叫什么?

这不完全是哈希问题,因为 IIRC 哈希通常涉及编码成比原始字符串更短的字符串,并且涉及冲突。

我不需要 冲突,而且我真的不在乎编码字符串有多长,只要它比原始情况短即可。 (理想情况下,这将是给定子集的最短长度)

事实上,最好明确指定允许的字符集是什么,然后使用通用的编码算法进行编码。

解码也很高兴知道。

最佳答案

一个简单的解决方案是先转换为十六进制编码:

  • jrioj4oi3m_=.,ei9# => 6a72696f6a346f69336d5f3d2e2c65693923

然后将任何数字翻译成非十六进制字母:

  • 6a72696f6a346f69336d5f3d2e2c65693923 => waxswzwfwatuwfwzttwdvftdsescwvwztzst

因此输出字符串总是恰好是输入字符串长度的两倍,并且只包含 a-z 范围内的字符。

这可以像这样在 python 中轻松实现:

>>> enc = str.maketrans('0123456789', 'qrstuvwxyz')
>>> dec = str.maketrans('qrstuvwxyz', '0123456789')
>>> s = 'jrioj4oi3m_=.,ei9#'
>>> x = s.encode('ascii').hex().translate(enc)
>>> x
'waxswzwfwatuwfwzttwdvftdsescwvwztzst'
>>> bytes.fromhex(x.translate(dec)).decode('ascii')
'jrioj4oi3m_=.,ei9#'

关于python - 将任何 ASCII 字符串唯一编码为使用 ASCII 子集的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65191097/

27 4 0
文章推荐: Macbook m1 上的 Selenium
文章推荐: FastAPI:CORS 中间件不适用于 GET 方法
文章推荐: python - 有没有办法在 python 中使用 selenium 获取
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com