【问题标题】:problems with declaring encoding in a source file在源文件中声明编码的问题
【发布时间】:2015-01-28 23:34:19
【问题描述】:

我正在尝试学习在读取 PEP 263 的源文件中使用编码声明,并且我正在自己尝试,但遇到了一些麻烦。

这是我的文件 cod.py

# -*- coding: utf-16 -*-
print('ciao')

我使用 UTF-16 编码保存了它;现在:

antox@antox-pc ~/Scrivania $ python3 cod.py 
  File "cod.py", line 1
SyntaxError: Non-UTF-8 code starting with '\xff' in file cod.py on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

所以我不明白我哪里错了。

附:我正在使用 gedit 2.30.4

【问题讨论】:

    标签: python encoding


    【解决方案1】:

    不接受 UTF-16 作为 Python 源代码的编码。来自 PEP 263(概念部分,第 1 项):

    任何允许处理前两行的编码 上述方式被允许作为源代码编码,这 包括 ASCII 兼容的编码以及某些 多字节编码,例如 Shift_JIS。它不包括 对所有字符使用两个或更多字节的编码,例如 例如UTF-16。这样做的原因是为了保持编码 标记器中的检测算法很简单。

    所以你得到的错误是意料之中的:你可以使用不同的编码(除了默认的 UTF-8),只要它可以被 Python 检测到。

    【讨论】:

    • 有一点我不明白,为什么有人要使用编码声明? Python 3.X 默认为 utf-8,我认为今天每个人都在他们的文件中使用这种编码
    • @antox:是的,如果您使用 UTF-8,那么您不需要声明编码。只有当您希望它与众不同时(出于某种原因)。
    • @simeon_visser 我想问你一件事,这个声明编码的问题是不是因为在以前的python版本中默认是ascii而在python 2.1之前它不接受除了ascii之外的另一种编码?
    • @antox:这是可能的——我在 Python 2.1 时没有使用 Python,但我确实知道,随着 Python 使用的增加和 Python 3.x 的发布(基于使用,例如使用 2.x 分隔字节和 Unicode 的 Web 框架)。源编码很有用,但 UTF-8 应该适用于大多数情况 - 正如 PEP 所说,这种更改是由于 Python 2.1 中的情况而做出的。只是现在 UTF-8 是默认值,您实际上不需要声明不同的编码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    相关资源
    最近更新 更多