对于 utf-8,python 2 和 3 之间的区别



为什么下面两个命令的输出不同?

$ 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())'
é

最新更新