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

标签 python utf-8

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

$ python2.7 -c 'print("\303\251")' 
é   # <-- Great

$ python3.6 -c 'print("\303\251")'
é  # <-- WTF?!

从“\303\251”输出“é”的python3命令是什么?

最诚挚的问候,

奥利维尔

最佳答案

在 Python 2 上,您告诉 Python 打印两个字节。它打印两个字节。您的终端将这两个字节解释为 é 编码并显示 é。 (看起来您的终端正在使用 UTF8。)

在 Python 3 上,您告诉 Python 使用 Unicode 代码点 0o303 和 0o251(八进制)打印两个字符。这些字符是é。 Python 使用与系统相关的编码(可能是 UTF8)对这些字符进行编码,并将结果字节写入 stdout。然后,您的终端对字节进行解码并显示 é

如果您希望 Python 3 打印 é,请为其提供 Unicode 代码点 (\u00e9),或者只是告诉它打印 é >:

$ python3.6 -c 'print("é")'
é

关于python - python 2 和 3 对于 utf-8 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52635363/

相关文章:

c# - 有没有办法在 C# 中以字节为单位告知 UTF-8 编码字符串的长度?

python - Tkinter 按钮不会从条目中更改

sql - 在MS Access中导出UTF-8编码的文本文件

python - 为什么 import * 不运行导入的代码?

Python Pandas iterrows 和 set_value 作为矢量化函数

POST提交中的PHP重音字符

java - Maven过滤乱码特殊字符

c++ - 将字符串从 UTF-8 转换为 ISO-8859-1

python - 值太多,无法解压混淆矩阵

python - Python 中不一致的正则表达式匹配