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

时间:2015-02-10 10:13:58

标签: python python-3.x python-2.x

我遇到了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  

2 个答案:

答案 0 :(得分:6)

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

Python 2字符串是字节串,因此它们是完全输出的。

答案 1 :(得分:6)

在Python 3中,所有字符串文字都是unicode。

转换为UTF-8的

\A0no-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...