Python3在打印十六进制值时添加额外的字节

2024-03-29 12:38:42 发布

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

我在Python2和Python3之间遇到了一个奇怪的区别。当用Python3打印相同的字符列表时,会产生额外的C2字节。我本以为会有同样的行为。Python的行为和我预想的一样。我错过了什么?

$ python3 -c "print('\x30\xA0\x04\x08')" | xxd
0000000: 30c2 a004 080a     
$ python2 -c "print('\x30\xA0\x04\x08')" | xxd
0000000: 30a0 0408 0a  

Tags: 列表字节字符python3xa0printc2x04
2条回答

python3字符串是unicode,在您的平台上unicode是使用UTF-8编码打印的。unicode字符U+00A0的UTF-8编码是0xC2 0xA0,这就是您看到的。在

python2字符串是bytestrings,因此它们是精确输出的。在

在python3中,所有的字符串文本都是unicode。在

转换为UTF-8的\A0^{}

U+00A0 no-break space (HTML   · ) Can be encoded in UTF-8 as C2 A0

试试这个:

$ python3 -c "import sys; sys.stdout.buffer.write(b'\x30\xA0\x04\x08')" | xxd
0000000: 30a0 0408                                0...

相关问题 更多 >