【问题标题】:Python3 adds extra byte when printing hex valuesPython3 在打印十六进制值时添加额外的字节
【发布时间】:2015-04-10 07:57:04
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    Python 2 字符串是字节串,所以它们是精确输出的。

    【讨论】:

    • 非常感谢!这有帮助。我没有看到 U+00A0 的问题。
    【解决方案2】:

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

    \A0转换为UTF-8是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...
    

    【讨论】:

    • 非常感谢!这有帮助。我没有看到 U+00A0 的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 2014-02-27
    • 1970-01-01
    • 2015-01-17
    • 2012-05-22
    • 2016-04-17
    • 2022-11-01
    相关资源
    最近更新 更多