我正在尝试将字节d0
打印到Python 3.7.2中的stdout。我有以下代码:
print("\xd0", end = "")
但是,当我执行此命令时,它会输出字节c390
。
$ python -c 'print("\xd0", end = "")' | xxd
00000000: c3 90
为什么不输出字节\xd0
?
答案 0 :(得分:2)
"\xd0"
是一个str
对象,在Python 3中是一个 Unicode 字符串(= Unicode 代码点的序列),其中包含Unicode 代码点 U + 00D0(即208,即Ð);使用print
编写代码时,Python必须将其从Unicode(str
)转换为字节(bytes
),因此它必须使用 encoding ( “抽象代码点”到字节转换器)。
在您的情况下,通常是UTF-8,其中代码点U + 00D0被编码为c3 90的代码单位(=字节)序列。
如果要从字面上输出字节0xd0,则必须使用字节字符串并直接进入sys.stdout
之后的字节流:
import sys
sys.stdout.buffer.write(b'\xd0')
答案 1 :(得分:1)
它将字符U + 00D0(“Д)打印为UTF-8。如果要将字节字符串输出到stdout,请使用sys.stdout.buffer
:
import sys
sys.stdout.buffer.write(b"\xd0")
"\xd0"
是Unicode代码点的字符串,而b"\xd0"
是字节的字符串。