在 Python 3 中打印字节时强制转义可打印字符

Car*_*Moe 4 byte python-3.x

例如,我有一个字节对象

test = b'\x83\xf8\x41\x41\x41'
Run Code Online (Sandbox Code Playgroud)

我想将此对象打印到标准输出,但如果我这样做,Python 会将对象中的可打印字符转换为 ASCII:

print(test)
b'\x83\xf8AAA'
Run Code Online (Sandbox Code Playgroud)

有没有办法强制 Python 3 将可打印字符(在本例中为三个“A”)打印为转义字节?

也就是说,使得print(test)输出

b'\x83\xf8\x41\x41\x41'
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 6

不,repr()输出不可配置;它是一个调试工具。

您可以使用binascii.hexlify()来获取十六进制表示:

>>> test = b'\x83\xf8\x41\x41\x41'
>>> from binascii import hexlify
>>> test = b'\x83\xf8\x41\x41\x41'
>>> print(hexlify(test))
b'83f8414141'
Run Code Online (Sandbox Code Playgroud)

或者您可以将每个单独的“字节”值转换为十六进制表示:

>>> print("b'{}'".format(''.join('\\x{:02x}'.format(b) for b in test)))
b'\x83\xf8\x41\x41\x41'
Run Code Online (Sandbox Code Playgroud)

这产生了另一种表示。