【发布时间】:2021-04-21 21:28:03
【问题描述】:
我正在尝试使用 python 将带有特殊字符的字符串从 ASCII 转换为十六进制,但我似乎没有得到正确的值,并注意到每当我尝试转换字符串时它都可以正常工作没有特殊字符。所以基本上这就是我正在做的事情:
import binascii
s = "D`Cزف³›"
s_bytes = str.encode(s)
hex_value = str(binascii.hexlify(s_bytes),'ascii')
print (hex_value)
输出
446043d8b2d981c2b316e280ba
输出应该在哪里(使用在线转换器https://www.rapidtables.com/convert/number/ascii-to-hex.html):
446043632641b3203a
【问题讨论】:
-
将该站点上的字符编码更改为 UTF-8,您会看到它匹配。如果您的输入实际上不是 ASCII,您就不能期望进行合理的转换。
-
你输入的字符串不是ASCII
-
注意
s不是一个纯 ASCII 字符串,所以 ASCII 到 Hex 是用词不当。encode默认使用UTF-8,因此您将 UTF-8 编码的字节字符串的字节作为十六进制值。 -
hex_value = ''.join([f'{ord(c):x}' for c in s])会得到你想要的,但这是你需要的吗? ???由于某些字符有 2 位、3 位和 4 位数字值,您将如何将其转换回来。 -
似乎我们正在解决X-Y Problem。你为什么要这个?你真正想解决什么问题?