这种语法最早是谁发明的: -*- coding: utf-8 -*-
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 编码声明),不过我不确定它是否是第一个使用这种语法的程序。