这种语法最早是谁发明的: -*- coding: utf-8 -*-

175 投票
4 回答
136032 浏览
提问于 2025-04-16 11:04

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

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

我之前肯定见过这种指令(-*- var: value -*-),所以我猜 Python 并不是发明它们的,也不是唯一使用这种指令的语言。

那么,这种语法是从哪里来的呢?有没有完整的规范,比如说这个值可以包含空格、特殊符号、换行符,甚至是 -*- 本身吗?

还有哪些其他软件也能识别这种元数据语法呢?

我的程序会写纯文本文件,我想用这种格式在里面加入一些元数据。

4 个回答

11

这就是所谓的文件本地变量,它们是Emacs可以理解并相应设置的。你可以查看Emacs手册中对应的这一部分,你可以在文件的开头或者结尾定义这些变量。

62

# -*- coding: utf-8 -*- 是 Python 2 的一个特性。

在 Python 3.0 及以上版本中,源文件的默认编码已经是 UTF-8,所以你可以放心地删除这一行。因为如果没有其他特别的说明,默认都是 UTF-8,这行代码就没有什么作用。想了解更多,可以看看 我在 Python 3 中应该使用编码声明吗?


pyupgrade 是一个工具,可以用来处理你的代码,去掉那些 Python 2 的注释和其他没用的东西,比如让你所有的类都继承自 object

107

这种指定Python文件编码的方式来源于PEP 0263 - 定义Python源代码编码

GNU Emacs也能识别这种方式(参见Python语言参考,2.1.4 编码声明),不过我不确定它是否是第一个使用这种语法的程序。

撰写回答