在Python 3中,单字节(\ xd0)被打印为两个字节(\ xc3 \ x90)的序列

时间:2019-03-30 00:11:28

标签: python python-3.x

我正在尝试将字节d0打印到Python 3.7.2中的stdout。我有以下代码:

print("\xd0", end = "")

但是,当我执行此命令时,它会输出字节c390

$ python -c 'print("\xd0", end = "")' | xxd    
00000000: c3 90

为什么不输出字节\xd0

2 个答案:

答案 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"是字节的字符串。