我应该在Python 3中使用编码声明吗?

Mat*_*łło 93 python encoding utf-8 python-3.x

默认情况下,Python 3对源代码文件使用UTF-8编码.我还应该在每个源文件的开头使用编码声明吗?喜欢# -*- coding: utf-8 -*-

Mar*_*ers 94

由于默认值为 UTF-8,因此您只需在偏离默认值时使用该声明,或者依赖其他工具(如IDE或文本编辑器)来使用该信息.

换句话说,就Python而言,只有当您想要使用不同的编码时才需要使用该声明.

其他工具(例如编辑器)可以支持类似的语法,这就是为什么PEP 263规范允许语法具有相当大的灵活性(它必须是注释,文本coding必须在那里,后跟一个:=字符和可选的空格,然后是公认的编解码器).

请注意,它仅适用于Python 读取源代码的方式.它不适用于执行该代码,因此不适用于打印,打开文件或任何其他I/O操作如何在字节和Unicode之间进行转换.有关Python,Unicode和编码的更多详细信息,我强烈建议您阅读Python Unicode HOWTO,或者Ned Batchelder进行的非常彻底的Pragmatic Unicode演讲.

  • 编辑源文件时,某些编辑器切换到预期的编码时,`# - * - coding:utf-8 - * - `可能仍然有用. (26认同)
  • @endolith:UTF-8 BOM是微软提出的地球上令人厌恶的东西..请参阅https://en.wikipedia.org/wiki/Byte_order_mark#UTF-8 (11认同)
  • @MartijnPieters 你的链接似乎不同意你的观点 (2认同)
  • @endolith:不,WP文章只总结了背景,我个人认为这是令人厌恶的.BOM的要点是记录字节顺序(因此命名为字节顺序标记).UTF-8中没有字节顺序混淆,它只有UTF-16和UTF-32中的那个功能.该值已经是一个重新定位的零宽度不间断空格字符(方便,因为意外打印最终会产生完全不可见的输出),在我看来,重新使用它是一个神奇的常数是错误的. (2认同)

Sła*_*art 8

不,如果:

  • 整个项目仅使用UTF-8,这是默认设置。
  • 并且您确定您的 IDE 工具不需要每个文件中的编码声明。

是的,如果

  • 您的项目依赖于不同的编码
  • 或依赖于许多编码。

对于多编码项目:

如果某些文件在编码non-utf-8,那么即使这些编码中UTF-8,你应该添加太多的编码声明,因为金科玉律Explicit is better than implicit.

参考:

  • PyCharm 不需要该声明:

在pycharm中为特定文件配置编码

  • vim 不需要那个声明,但是:
# vim: set fileencoding=<encoding name> :
Run Code Online (Sandbox Code Playgroud)