我遇到了Python2和Python3之间的一个奇怪的区别。使用Python3打印时,打印相同的字符列表会产生额外的字节C2。我本来期望同样的行为。 Python2的行为与我预期的一样。我在这里缺少什么?
$ python3 -c "print('\x30\xA0\x04\x08')" | xxd
0000000: 30c2 a004 080a
$ python2 -c "print('\x30\xA0\x04\x08')" | xxd
0000000: 30a0 0408 0a
答案 0 :(得分:6)
Python 3字符串是unicode,在您的平台上,unicode使用UTF-8编码打印。 unicode字符U + 00A0的UTF-8编码是0xC2 0xA0,这就是你所看到的。
Python 2字符串是字节串,因此它们是完全输出的。
答案 1 :(得分:6)
在Python 3中,所有字符串文字都是unicode。
转换为UTF-8的 \A0
是no-break space
:
U+00A0
不间断空格(HTML 
;·
)可以UTF-8编码为C2 A0
试试这个:
$ python3 -c "import sys; sys.stdout.buffer.write(b'\x30\xA0\x04\x08')" | xxd
0000000: 30a0 0408 0...