2024-03-29 12:38:42 发布
网友
我在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
python3字符串是unicode,在您的平台上unicode是使用UTF-8编码打印的。unicode字符U+00A0的UTF-8编码是0xC2 0xA0,这就是您看到的。在
python2字符串是bytestrings,因此它们是精确输出的。在
在python3中,所有的字符串文本都是unicode。在
转换为UTF-8的\A0是^{}:
\A0
U+00A0 no-break space (HTML   · ) Can be encoded in UTF-8 as C2 A0
U+00A0
 
·
C2 A0
试试这个:
$ python3 -c "import sys; sys.stdout.buffer.write(b'\x30\xA0\x04\x08')" | xxd 0000000: 30a0 0408 0...
python3字符串是unicode,在您的平台上unicode是使用UTF-8编码打印的。unicode字符U+00A0的UTF-8编码是0xC2 0xA0,这就是您看到的。在
python2字符串是bytestrings,因此它们是精确输出的。在
在python3中,所有的字符串文本都是unicode。在
转换为UTF-8的} :
\A0
是^{试试这个:
相关问题 更多 >
编程相关推荐