来自下载代码的一些源文件具有以下标头
# -*- coding: utf-8 -*-
我知道 utf-8 编码是什么,但为什么需要它作为 python 源文件中的标头?
无论您需要在不是来自 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
更直接的答案:
在 Python 3+中:您不需要声明。UTF-8 是默认值。确保文件以 UTF-8 编码。一些 Windows 编辑器默认没有它。声明它不会有什么坏处,一些编辑可能会使用它。
在 Python 2中:总是。默认值取决于操作系统。
请记住:这只是关于您的源代码文件。现在在第三个千年中,字符串类型不再存在。您必须注意text类型,即字节序列和编码。您仍然必须在所有输入和输出操作中定义您的编码。这些操作仍将取决于您的环境,因此最好遵循以下规则:显式优于隐式。
始终使用 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
当您使用非 ASCII 字符时。例如,当我用挪威语评论我的来源时,如果 .py 中出现 ØÆÅ 字符,它会抱怨而不是“编译”。
每当读取或写入文本时,编码就会发挥作用。总是。python 解释器必须将您的文件作为文本读取,才能理解它。唯一无需处理编码就可以逃脱的情况是您只使用 ASCII 范围内的字符。在这种情况下,解释器几乎可以使用世界上的任何编码,并且可以正确处理,因为几乎所有编码都将这些字符编码为相同的字节。
你不应该coding: utf-8
仅仅因为你的文件中有超出 ascii 的字符就使用它,它甚至可能是有害的。这是 python 解释器的一个提示,告诉它你的文件是什么编码。除非你配置了你的文本编辑器,否则文本编辑器很可能不会将你的文件保存在 utf-8 中。所以现在你给 python 解释器的提示是错误的。
因此,当您的文件以 utf-8 编码时,您应该使用它。如果它是在 windows-1252 中编码的,你应该使用coding: windows-1252
等等。