Python文件中指定编码时“魔法行”是如何工作的?

10 投票
2 回答
6120 浏览
提问于 2025-04-16 18:03

在一个Python文件的开头(第一行),我有时会看到

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

有时又会看到

# encoding: utf-8

这两行看起来都在做同一件事:指定文件中所有文本的编码为utf8。

我有两个问题:

  1. 为什么这样也能工作?我以为解释器会忽略#后面的内容,因为那是注释。
  2. 这两行之间有什么区别?解释器只是忽略-*-吗?

2 个回答

3

之所以能工作,是因为这个实现会去寻找它,并没有什么神奇的地方。其实没有区别,所有可能的变体都是由PEP 263定义的(唯一的区别是第一个是兼容Emacs的)。

11

这两种写法是一样的。-*- 这种写法是一种特殊的注释,Emacs(一个文本编辑器)能识别它。想了解更多,可以看看 PEP 263

如果像这两种形式的注释出现在文件的 前两行 中,解释器就会用指定的编码方式来读取这个文件。

撰写回答