为什么下面两个命令的输出不同?
$ python2.7 -c 'print("303251")'
é # <-- Great
$ python3.6 -c 'print("303251")'
é # <-- WTF?!
从"\303\251"输出"é"的 python3 命令是什么?
此致敬意
奥利维尔
在 Python2 上,你告诉 Python 打印两个字节。它打印两个字节。您的终端将这两个字节解释为é
的编码并显示é
。(看起来您的终端使用的是 UTF8。
在 Python 3 上,你告诉 Python 用 Unicode 代码点 0o303 和 0o251(八进制(打印这两个字符。这些字符é
.Python 以依赖于系统的编码(可能是 UTF8(对这些字符进行编码,并将生成的字节写入 stdout。然后,您的终端对字节进行解码并显示é
.
如果你想让 Python 3 打印é
,给它 Unicode 代码点 (u00e9
(,或者只是告诉它打印é
:
$ python3.6 -c 'print("é")'
é
正如user2357112的第一个答案中所解释的那样,这一行告诉Python 3打印两个由其八进制值指示的字符(八进制字节表示字符的Unicode码位(:
$ python3.6 -c 'print("303251")'
é
以下行可用于类似于 Python 2 的行为:
$ python3.6 -c 'print(b"303251".decode())'
é