Python 3字节的奇怪表示法

5 python byte character-encoding python-3.x python-3.5

有人可以确定这些符号bytes是什么吗?乍一看,我倾向于认为"十六进制",但我不认识像什么事情xf1Ye1fl有:

b'vy\xe9\xb5\xa2\xba\xf1Y\xe8\xe1fl\x1d\x87\xacC'
Run Code Online (Sandbox Code Playgroud)

当我用东西编码时,我得到了这个some_text.encode('utf-8').

我试图获得我可以传递给使用Python 2的字节字符串的加密方法的字节.

Zer*_*eus 5

你是对的 - 这是一个十六进制表示法.

在字面一个字节,这不能由可打印的ASCII字符来表示(或标准逃逸的一个任意字节\n,\t\r)被表示为\xNN,其中NN是字节的2位十六进制表示.

令你困惑的是你错误地例如\xf1Y单个转义序列,实际上它代表两个独立的字节:

>>> len(b'\xf1Y')
2
>>> [bytes([b]) for b in b'\xf1Y']
[b'\xf1', b'Y']
Run Code Online (Sandbox Code Playgroud)

如果迭代一个bytes对象,你将得到字节的整数值:

>>> 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'
Run Code Online (Sandbox Code Playgroud)

Python字符串和字节对象中的转义序列的文档有关于Python理解的转义序列的更多信息(尽管上面的那些是它用来表示字节对象的唯一信息).

  • 谢谢!是的,这就是让我困惑的地方。我不知道它是将文字字符描述与 /x__ 十六进制代码混合在一起。 (4认同)