Python 3字节的奇怪符号表示法

13

有人能识别这些字节的符号吗?乍一看,我倾向于认为这是“十六进制”,但我不认识像xf1Ye1fl这样的符号:

b'vy\xe9\xb5\xa2\xba\xf1Y\xe8\xe1fl\x1d\x87\xacC'

当我使用some_text.encode('utf-8')进行编码时,会得到这个结果。

我正在尝试获取字节,以便将其传递给与Python 2的字节字符串配合使用的加密方法。

1个回答

14

你是正确的 - 这是十六进制表示法。

在字节文字中,任何无法用可打印的ASCII字符(或标准转义符之一\n\t\r)表示的字节都表示为\xNN,其中NN是字节的2位十六进制表示。

让你感到困惑的是,你将例如\xf1Y误认为是一个单独的转义序列,而实际上它代表了两个分离的字节:

>>> len(b'\xf1Y')
2
>>> [bytes([b]) for b in b'\xf1Y']
[b'\xf1', b'Y']

如果您遍历字节对象,您将得到字节的整数值:

>>> list(b'vy\xe9\xb5\xa2\xba\xf1Y\xe8\xe1fl\x1d\x87\xacC')
[118, 121, 233, 181, 162, 186, 241, 89, 232, 225, 102, 108, 29, 135, 172, 67]
>>> bytes([118])
b'v'
>>> bytes([121])
b'y'
>>> bytes([233])
b'\xe9'

Python字符串和字节对象中的转义序列的文档提供了更多有关Python理解的转义序列的信息(虽然上面列出的是它用于表示字节对象的唯一转义序列)。请参考:Python字符串和字节对象中的转义序列

3
谢谢!是的,那就是让我困惑的地方。我不知道它是在/x__十六进制代码旁混合了文字字符描述。 - user4805123
非常感谢!我终于明白了。*-* - Vitali Pom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接