为了账号安全,请及时绑定邮箱和手机立即绑定

定义Python源代码编码的正确方法

定义Python源代码编码的正确方法

明月笑刀无情 2019-07-09 12:43:06
定义Python源代码编码的正确方法定义如何声明Python源代码编码。通常,Python文件的前2行应该以下内容开头:#!/usr/bin/python# -*- coding: <encoding name> -*-但我看过很多文件,开头是:#!/usr/bin/python# -*- encoding: <encoding name> -*-=> 编码而不是编码.那么,声明文件编码的正确方式是什么呢?是编码因为所用的正则表达式是懒惰的?或者它只是声明文件编码的另一种形式?我问这个问题是因为PEP没有提到编码,它只是在谈论编码.
查看完整描述

3 回答

?
慕妹3242003

TA贡献1824条经验 获得超6个赞

检查文档这里:

“如果Python脚本的第一行或第二行中的注释与正则表达式匹配coding[=:]\s*([-\w.]+),此注释作为编码声明处理“

“此表达式的推荐形式如下

# -*- coding: <encoding-name> -*-

也得到GNU Emacs的认可,以及

# vim:fileencoding=<encoding-name>

这是Bram Moolenaar‘s Vim所承认的。“

因此,您可以在“编码”部分之前放置几乎任何内容,但是如果您希望100%的python-docs-推荐兼容,则可以坚持“编码”(没有前缀)。

更具体地说,您需要使用Python识别的任何内容。以及您使用的特定编辑软件(如果它需要/接受任何事情)。例如coding表单被GNU Emacs(开箱即用)识别,但Vim不承认(是的,如果没有一个普遍的协议,它本质上是一个地盘战).


查看完整回答
反对 回复 2019-07-09
?
隔江千里

TA贡献1906条经验 获得超10个赞

第263页:

第一行或第二行必须匹配正则表达式“编码[:=]\s*([-\w.]+)”

所以,“恩编码:utf-8“火柴。

PEP提供了一些例子:

#!/usr/bin/python# vim: set fileencoding=<encoding name> :

 

# This Python file uses the following encoding: utf-8import os, sys


查看完整回答
反对 回复 2019-07-09
?
HUWWW

TA贡献1874条经验 获得超12个赞

它本身提到了下面的正则表达式:

要定义源代码编码,必须将一个神奇的注释作为文件中的第一行或第二行放在源文件中,例如:

# coding=<encoding name>

或(使用受欢迎编辑认可的格式):

#!/usr/bin/python# -*- coding: <encoding name> -*-

或:

#!/usr/bin/python# vim: set fileencoding=<encoding name> :

更准确地说,第一行或第二行必须匹配以下正则表达式:

^[ \t\f]*#.*?coding[:=][ \t]*([-_.a-zA-Z0-9]+)

因此,正如其他答案所总结的,它将匹配coding使用任何前缀,但如果您想尽可能地保持PEP兼容(即使据我所知,使用encoding而不是coding丝毫不违反PEP 263)-坚持“朴素”coding没有前缀。


查看完整回答
反对 回复 2019-07-09
  • 3 回答
  • 0 关注
  • 728 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信