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

Posted

技术标签:

【中文标题】我应该在 Python 3 中使用编码声明吗?【英文标题】:Should I use encoding declaration in Python 3? 【发布时间】:2012-12-14 12:31:14 【问题描述】:

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

【问题讨论】:

【参考方案1】:

否,如果:

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

是的,如果

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

对于多编码项目:

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

参考:

PyCharm 不需要该声明:

configuring encoding for specific file in pycharm

vim 不需要那个声明,但是:
# vim: set fileencoding=<encoding name> :

【讨论】:

【参考方案2】:

因为默认的 UTF-8,你只需要在你偏离默认的时候使用那个声明,或者如果你依赖其他工具(比如你的IDE或文本编辑器)来使用的信息。

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

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

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

【讨论】:

# -*- coding: utf-8 -*- 对于某些编辑器在编辑源文件时切换到预期的编码可能仍然有用。 @pepr 字节顺序标记也可以做到这一点,不是吗? @endolith:UTF-8 BOM 是微软在地球上带来的可憎之物。见en.wikipedia.org/wiki/Byte_order_mark#UTF-8 @MartijnPieters 您的链接似乎与您不一致 @endolith:不,WP文章只是总结了背景,我个人认为这是可憎的。 BOM 的要点是记录字节顺序(因此得名 Byte Order Mark)。 UTF-8 中没有字节顺序混淆,它仅在 UTF-16 和 UTF-32 中具有该功能。该值已经是一个重新使用的零宽度不间断空格字符(很方便,因为意外打印然后以完全不可见的输出结束),在我看来,将其重新用作魔术常数是错误的。

以上是关于我应该在 Python 3 中使用编码声明吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中声明编码 [重复]

python Django1.3 建立网站,无法加载css

我应该使用 UTF-8 通过网络发送数据吗?

Python 源程序编码注意事项?

我应该修复 Xcode 5 的“语义问题:未声明的选择器”吗?

我应该将变量声明为尽可能接近它们将被使用的范围吗?