正确的方式来定义Python源代码编码
PEP 263定义了如何定义Python源代码编码。
通常情况下,Python文件的前两行应该以:
#!/usr/bin/python # -*- coding: <encoding name> -*-
但是我看到很多文件开头:
#!/usr/bin/python # -*- encoding: <encoding name> -*-
– > 编码而不是编码 。
那么声明文件编码的正确方法是什么?
编码是允许的,因为使用的正则expression式是懒惰的? 或者它只是声明文件编码的另一种forms?
我在问这个问题,因为PEP没有谈论编码 ,只是谈论编码 。
在这里查看文档:
“如果Python脚本的第一行或第二行中的注释与正则expression式coding[=:]\s*([-\w.]+)
匹配coding[=:]\s*([-\w.]+)
,则该注释将作为编码声明”
“这个expression的推荐forms是
# -*- coding: <encoding-name> -*-
这也是由GNU Emacs认可的
# vim:fileencoding=<encoding-name>
这被Bram Moolenaar的VIM认可。“
所以,你可以在“编码”部分放置任何东西,但如果你想成为100%的python-docs-recommendation-compatible,那么坚持“编码”(没有前缀)。
更具体地说,你需要使用Python认可的和你使用的特定编辑软件 (如果它需要/接受任何东西)。 例如,GNU Emacs(而不是Vim)(是的,没有一个通用的协议,它本质上是一个草皮战争 )认可的coding
forms(开箱即用)。
PEP 263:
第一行或第二行必须匹配正则expression式“coding [:=] \ s *([ – \ w。] +)”
显然是“ 编码:UTF-8 ”匹配。
PEP提供了一些例子:
#!/usr/bin/python # vim: set fileencoding=<encoding name> :
# This Python file uses the following encoding: utf-8 import os, sys
只需在程序的顶部复制粘贴下面的语句,即可解决字符编码问题
#!/usr/bin/env python # -*- coding: utf-8 -*-
如果我没有弄错,源文件编码的最初build议是使用第一对几行的正则expression式,这将允许这两个行。
我认为正则expression式是沿着coding:
的一些东西coding:
其次是某些东西。
我发现这是: http : //www.python.org/dev/peps/pep-0263/这是最初的提议,但我似乎无法find最终规范,说明他们做了什么。
我当然使用encoding:
效果很好,显然是有效的。
尝试改变一下完全不同的东西,比如duhcoding: ...
看看是否也可以。
我怀疑它是类似于Ruby – 两种方法都可以。
这主要是因为不同的文本编辑器使用不同的方法(即这两个)标记编码。
用Ruby,只要第一个或第二个如果有一个shebang行包含一个匹配的string:
coding: encoding-name
并忽略这些线上的空白和其他绒毛。 (它通常可以是a =而不是:也是)。
我只是有同样的问题,并通过将其添加到我的Python脚本的顶部解决它:
# coding=utf-8