在python3中,单字节(\xd0)以两个字节的序列(\xc3\x90)打印

2024-09-29 21:55:43 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

但是,当我执行这个时,它输出字节c390。你知道吗

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

为什么它不输出字节\xd0?你知道吗


Tags: 代码字节stdout中将endprintd0c3
2条回答

"\xd0"是一个str对象,在python3中,它是一个Unicode字符串(=Unicode码点序列),包含Unicode码点U+00D0(即208,即Ð);当用print写入时,Python必须将其从Unicode(str)转换为字节(bytes),因此它必须使用编码(“抽象码点”到字节转换器)。你知道吗

在您的例子中,通常是UTF-8,其中代码点U+00D0被编码为代码单元(=bytes)序列c390。你知道吗

如果您想按字面意思输出一个字节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"是字节字符串。你知道吗

相关问题 更多 >

    热门问题