我应该在 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 中使用编码声明吗?的主要内容,如果未能解决你的问题,请参考以下文章