ChatGPT解决这个技术问题 Extra ChatGPT

这是从哪里来的:-*- 编码:utf-8 -*-

Python 将以下内容识别为定义文件编码的指令:

# -*- coding: utf-8 -*-

我之前肯定看到过这种说明(-*- var: value -*-)。它从何而来?完整的规范是什么,例如,值是否可以包含空格、特殊符号、换行符,甚至 -*- 本身?

我的程序将编写纯文本文件,我想使用这种格式在其中包含一些元数据。

这在我的编辑器 PyCharm 中更容易记住和工作。 # coding: utf-8
在 Python 2.7 中使用 # coding: utf8 开箱即用,即使在 PyCharm 之外也是如此。 (我使用 SublimeText)。
@Cbhihe这个问题与Python无关,与指令的作用或工作方式无关。它询问是哪个 pre-Python 软件发明了它,以及它是否不仅仅是文件编码。

A
Andrea Spadaccini

这种指定 Python 文件编码的方式来自 PEP 0263 - Defining Python Source Code Encodings

它也被 GNU Emacs 识别(参见 Python Language Reference, 2.1.4 Encoding declarations),尽管我不知道它是否是第一个使用该语法的程序。


根据我从 Emacs 手册中得出的结论,值可以是任何 LISP 表达式,特别是双引号字符串
感谢您的鼓励链接。我以前的印象是该指令仅由文本编辑器使用。直到现在,我才知道如果注释出现在文件的前两行,python 解释器实际上会解析注释。
B
Boris Verkhovskiy

# -*- coding: utf-8 -*- 是 Python 2 的东西。

在 Python 3.0+ 中,源文件 is already UTF-8 的默认编码,因此您可以安全地删除该行,因为除非它说的不是“utf-8”的 some variation,否则它没有任何效果。见Should I use encoding declaration in Python 3?

pyupgrade 是一种工具,您可以在代码上运行以从 Python 2 中删除这些注释和其他无用的剩余部分,例如让您的所有类都继承自 object


A
Alex Ott

这就是所谓的文件局部变量,它被 Emacs 理解并相应地设置。请参阅相应的 section in Emacs manual - 您可以在文件的页眉或页脚中定义它们


Python 解释器本身也可以理解这种特定类型的文件局部变量,它不仅适用于文本编辑器。 stackoverflow.com/questions/41680533/…
c
cwp393

在 PyCharm 中,我会忽略它。它会关闭底部的 UTF-8 指示器,并警告编码是硬编码的。不要认为你需要上面提到的 PyCharm 注释。


实际上,如果我输入像 test1 = 'äöü' 这样的行,它会提示您将这样的标题添加到文件中。 (pycharm 2019.1)