PEP 263定义了如何声明Python源代码编码.
通常,Python文件的前两行应该以:
#!/usr/bin/python
# -*- coding: <encoding name> -*-
Run Code Online (Sandbox Code Playgroud)
但我看到很多文件以:
#!/usr/bin/python
# -*- encoding: <encoding name> -*-
Run Code Online (Sandbox Code Playgroud)
=> 编码而不是编码.
那么声明文件编码的正确方法是什么?
是否允许编码,因为使用的正则表达式是懒惰的?或者它只是声明文件编码的另一种形式?
我问这个问题是因为PEP没有谈论编码,它只是谈论编码.
Raf*_*ird 157
查看这里的文档:
"如果Python脚本的第一行或第二行中的coding[=:]\s*([-\w.]+)注释与正则表达式匹配,则此注释将作为编码声明处理"
"这个表达的推荐形式是
# -*- coding: <encoding-name> -*-
Run Code Online (Sandbox Code Playgroud)
这也得到了GNU Emacs的认可,以及
# vim:fileencoding=<encoding-name>
Run Code Online (Sandbox Code Playgroud)
这是Bram Moolenaar的VIM认可的."
所以,你可以在"编码"部分之前添加任何东西,但如果你想要100%python-docs-recommendation兼容,坚持"编码"(没有前缀).
更具体地说,您需要使用Python识别的任何内容以及您使用的特定编辑软件(如果它需要/接受任何内容).例如,coding表格被GNU Emacs识别(开箱即用)但不是Vim(是的,没有普遍协议,它本质上是一场草皮战争).
var*_*tec 37
PEP 263:
第一行或第二行必须匹配正则表达式"coding [:=]\s*([ - \w.] +)"
所以," 编码:UTF-8 "匹配.
PEP提供了一些例子:
#!/usr/bin/python
# vim: set fileencoding=<encoding name> :
Run Code Online (Sandbox Code Playgroud)
# This Python file uses the following encoding: utf-8
import os, sys
Run Code Online (Sandbox Code Playgroud)
Har*_*GUL 29
只需在程序顶部复制粘贴下面的语句.它将解决字符编码问题
#!/usr/bin/env python
# -*- coding: utf-8 -*-
Run Code Online (Sandbox Code Playgroud)
小智 5
PEP 263本身提到了它遵循的正则表达式:
\n\n\n\n\n要定义源代码编码,必须将魔术注释放入源文件中,作为文件的第一行或第二行,例如:
\n\nRun Code Online (Sandbox Code Playgroud)\n\n# coding=<encoding name>\n或(使用流行编辑器识别的格式):
\n\nRun Code Online (Sandbox Code Playgroud)\n\n#!/usr/bin/python\n# -*- coding: <encoding name> -*-\n或者:
\n\nRun Code Online (Sandbox Code Playgroud)\n\n#!/usr/bin/python\n# vim: set fileencoding=<encoding name> : \n更准确地说,第一行或第二行必须匹配以下正则表达式:
\n\nRun Code Online (Sandbox Code Playgroud)\n^[ \\t\\f]*#.*?coding[:=][ \\t]*([-_.a-zA-Z0-9]+)\n
因此,正如其他答案已经总结的那样,它会coding与任何前缀匹配,但如果您希望尽可能符合 PEP 要求(尽管据我所知,使用encoding而coding不是不以任何方式违反 PEP 263) \xe2\x80\x94 坚持使用 \'plain\' coding,没有前缀。
| 归档时间: |
|
| 查看次数: |
76189 次 |
| 最近记录: |