正确的方式来定义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)(是的,没有一个通用的协议,它本质上是一个草皮战争 )认可的codingforms(开箱即用)。

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