30

来自下载代码的一些源文件具有以下标头

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

我知道 utf-8 编码是什么,但为什么需要它作为 python 源文件中的标头?

4

5 回答 5

14

无论您需要在不是来自 ascii 的代码字符中使用,例如:

ă 

口译员会抱怨他不理解那个字符。

通常在定义常量时会发生这种情况。

示例:添加到 x.py

print 'ă'

然后启动一个python控制台

import x
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "x.py", line 1
 SyntaxError: Non-ASCII character '\xc4' in file x.py on line 1, 
   but no encoding declared;
   see http://www.python.org/peps/pep-0263.html for details
于 2012-12-10T19:30:41.020 回答
8

更直接的答案:

在 Python 3+中:您不需要声明。UTF-8 是默认值。确保文件以 UTF-8 编码。一些 Windows 编辑器默认没有它。声明它不会有什么坏处,一些编辑可能会使用它。

在 Python 2中:总是。默认值取决于操作系统。

请记住:这只是关于您的源代码文件。现在在第三个千年中,字符串类型不再存在。您必须注意text类型,即字节序列编码。您仍然必须在所有输入和输出操作中定义您的编码。这些操作仍将取决于您的环境,因此最好遵循以下规则:显式优于隐式

于 2019-05-13T19:18:39.063 回答
7

始终使用 UTF-8 并确保您的编辑器也使用 UTF-8。如果您使用 Python 27,请像这样启动您的 Python 脚本:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

这是 Nick Johnson 关于 Python 和 UTF-8 的一篇很好的博客文章:

http://blog.notdot.net/2010/07/Getting-unicode-right-in-Python 顺便说一句,这篇文章是在他可以使用之前写的:

from __future__ import unicode_literals
于 2012-12-10T20:38:00.327 回答
3

当您使用非 ASCII 字符时。例如,当我用挪威语评论我的来源时,如果 .py 中出现 ØÆÅ 字符,它会抱怨而不是“编译”。

于 2012-12-10T19:32:53.893 回答
2

每当读取或写入文本时,编码就会发挥作用。总是。python 解释器必须将您的文件作为文本读取,才能理解它。唯一无需处理编码就可以逃脱的情况是您只使用 ASCII 范围内的字符。在这种情况下,解释器几乎可以使用世界上的任何编码,并且可以正确处理,因为几乎所有编码都将这些字符编码为相同的字节。

你不应该coding: utf-8仅仅因为你的文件中有超出 ascii 的字符就使用它,它甚至可能是有害的。这是 python 解释器的一个提示,告诉它你的文件是什么编码。除非你配置了你的文本编辑器,否则文本编辑器很可能不会将你的文件保存在 utf-8 中。所以现在你给 python 解释器的提示是错误的。

因此,当您的文件以 utf-8 编码时,您应该使用它。如果它是在 windows-1252 中编码的,你应该使用coding: windows-1252等等。

于 2012-12-10T19:41:43.387 回答