【发布时间】:2019-03-30 00:11:27
【问题描述】:
我正在尝试在 Python 3.7.2 中将字节 d0 打印到标准输出。我有以下代码:
print("\xd0", end = "")
但是,当我执行此操作时,它会输出字节 c390。
$ python -c 'print("\xd0", end = "")' | xxd
00000000: c3 90
为什么不输出字节\xd0?
【问题讨论】:
标签: python python-3.x
我正在尝试在 Python 3.7.2 中将字节 d0 打印到标准输出。我有以下代码:
print("\xd0", end = "")
但是,当我执行此操作时,它会输出字节 c390。
$ python -c 'print("\xd0", end = "")' | xxd
00000000: c3 90
为什么不输出字节\xd0?
【问题讨论】:
标签: python python-3.x
"\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')
【讨论】:
d0 字节?
\xd0)被打印为两个字符的序列(\xc3\x90)”或类似的东西?
它将字符 U+00D0(“Д)打印为 UTF-8。如果你想输出一个字节串到标准输出,使用sys.stdout.buffer:
import sys
sys.stdout.buffer.write(b"\xd0")
"\xd0" 是一串 Unicode 码位,但 b"\xd0" 是一串字节。
【讨论】: