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

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

【问题讨论】:

    标签: python python-3.x encoding 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 中具有该功能。该值已经是一个重新使用的零宽度不间断空格字符(很方便,因为意外打印然后以完全不可见的输出结束),在我看来,将其重新用作魔术常数是错误的。
      猜你喜欢
      • 2012-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-27
      • 1970-01-01
      相关资源
      最近更新 更多