这个问题在这里已有答案:
我试图在Python 3.7.2中将字节d0
打印到stdout。我有以下代码:
print("\xd0", end = "")
但是,当我执行它时,它输出字节c390
。
$ python -c 'print("\xd0", end = "")' | xxd
00000000: c3 90
为什么不输出字节\xd0
?
"\xd0"
是一个str
对象,它在Python 3中是一个Unicode字符串(=一个Unicode代码点序列),包含Unicode代码点U + 00D0(即208即Ð);当用print
编写它时,Python必须将它从Unicode(str
)转换为字节(bytes
),因此它必须使用编码(“抽象代码点”到字节转换器)。
在您的情况下,通常情况下,它恰好是UTF-8,其中代码点U + 00D0被编码为代码单元(=字节)序列c3 90。
如果你想输出一个字节0xd0,你必须使用一个字节字符串,直接到sys.stdout
以外的字节流:
import sys
sys.stdout.buffer.write(b'\xd0')
它将字符U + 00D0(“Д)打印为UTF-8。如果要将字节字符串输出到stdout,请使用sys.stdout.buffer
:
import sys
sys.stdout.buffer.write(b"\xd0")
"\xd0"
是一串Unicode代码点,但b"\xd0"
是一个字节串。