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


Answers:


112

因为默认值为 UTF-8,所以仅在偏离默认值时或者在依赖其他工具(例如IDE或文本编辑器)来使用该信息时,才需要使用该声明。

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

其他工具(例如您的编辑器)也可以支持类似的语法,这就是PEP 263规范在语法上具有相当大的灵活性的原因(它必须是注释,文本coding必须在其中,后跟a :=字符以及可选的空白,然后是公认的编解码器)。

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


28
# -*- coding: utf-8 -*-可能仍然是有用的一些编辑器切换到预期编辑源文件时编码。
pepr

1
@pepr字节顺序标记可以执行相同操作,不是吗?
endolith'7

12
@endolith:使用UTF-8 BOM是由微软..见第四把这个地球上所憎恶en.wikipedia.org/wiki/Byte_order_mark#UTF-8
的Martijn Pieters的

1
@MartijnPieters您的链接似乎与您不同意
endolith'7

2
@endolith:不,WP文章仅概述了背景,我个人认为这是可憎的。BOM的目的是记录字节顺序(因此,名称为字节顺序标记)。UTF-8中没有字节顺序混乱,它仅在UTF-16和UTF-32中具有该功能。该值已经是一个重新设计的零宽度不间断空格字符(很方便,因为意外打印然后最终以完全不可见的输出结束),在我看来,将其重新用作魔术常数是错误的。
马丁·皮特斯

6

不,如果:

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

是的,如果

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

对于多编码项目:

如果某些文件在中进行了编码non-utf-8,那么即使对于这些文件,UTF-8您也应该添加编码声明,因为黄金法则是Explicit is better than implicit.

参考:

  • PyCharm不需要该声明:

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

  • vim不需要该声明,但是:
# vim: set fileencoding=<encoding name> :
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.