我应该在python中输入什么样的编码声明

Sea*_*ene 7 python unicode encode

我从网站上了解到,当我不想输入友好的unicode字符时,我应该在python中添加代码声明:http://www.python.org/dev/peps/pep-0263/ ,但我仍然对此感到困惑.

假设我使用vim在linux中工作,并创建一个新的py文件和输入代码,如下所示:

#!/usr/bin/python2.7
# -*- coding: utf8 -*-
s = u'?'
print s
Run Code Online (Sandbox Code Playgroud)

1.我试图用代码替换第2行,如下所示:

import sys
reload(sys)
sys.setdefaultencoding('utf8')
Run Code Online (Sandbox Code Playgroud)

但它不起作用,不一样吗?

2.我对linux不太熟悉,我真的不知道为什么我应该_*_ 在代码扩展的开头和结尾添加 ,当我尝试# -*- coding: utf8 -*-用# code=utf8或替换时# code: utf8,我得到一个错误:

File "pythontest.py", line 3
SyntaxError: Non-ASCII character '\xde' in file pythontest.py on line 3, but no encoding declared; see     http://www.python.org/peps/pep-0263.html for details
Run Code Online (Sandbox Code Playgroud)

但这些代码声明在网站http://www.python.org/dev/peps/pep-0263/中提到!

根据文档,允许如下代码声明:

# This Python file uses the following encoding: utf-8
Run Code Online (Sandbox Code Playgroud)

哎呀,这是什么?我不认为它可以被计算机识别.代码在世界上应该声明什么?我感到越来越困惑.

感谢帮助.

mac*_*mac 3

您链接的 PEP 摘要确实说明了一切:

此 PEP 建议引入一种语法来声明Python 源文件的编码。然后, Python 解析器使用编码信息来使用给定的编码解释文件。最值得注意的是,这增强了源代码中 Unicode 文字的解释,并使得可以直接在 Unicode 感知编辑器中使用例如 UTF-8 编写 Unicode 文字。

(重点是我的)。

即使您想要做的事情可行(以编程方式替换源文件的编码),它也没有任何意义。想想看:代码是静态的(不会改变)。尝试使用不同的编码来读取它是没有意义的:只有一种正确的编码(源作者编辑源的编码)。

至于语法:

# This Python file uses the following encoding: utf-8
Run Code Online (Sandbox Code Playgroud)

PEP 本身说该语法是“没有解释器行,使用纯文本”。它是为人类放置的。因此,如果您在文本编辑器中打开文件并发现它充满乱码,您可以在其菜单中手动设置源的编码。

编辑:至于为什么应该将编码放在# -*-和之间-*-......这纯粹是传统的。第一个符号,哈希符号,告诉这是一个注释(因此它不会被编译为字节码),然后这_*_只是告诉解析器该特定注释是给他/她的一种方法。

这与输入源代码没有什么不同:

# TODO: fix this nasty bug
Run Code Online (Sandbox Code Playgroud)

其中该TODO:部分告诉开发人员(和某些 IDE)这是一条需要执行操作的消息。您实际上可以使用任何您想要的东西,包括@MarkZar或WTF!......只是约定!

哈!