单字节(\ xd0)在Python 3中以两个字节(\ xc3 \ x90)的顺序打印[重复]

问题描述 投票:1回答:2

这个问题在这里已有答案:

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

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

但是,当我执行它时,它输出字节c390

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

为什么不输出字节\xd0

python python-3.x
2个回答
2
投票

"\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')

1
投票

它将字符U + 00D0(“Д)打印为UTF-8。如果要将字节字符串输出到stdout,请使用sys.stdout.buffer

import sys
sys.stdout.buffer.write(b"\xd0")

"\xd0"是一串Unicode代码点,但b"\xd0"是一个字节串。

© www.soinside.com 2019 - 2024. All rights reserved.