我从网站上了解到,当我不想输入友好的unicode字符:http://www.python.org/dev/peps/pep-0263/时,我应该在python中添加代码声明,但我仍然对此感到困惑。
假设我在linux中使用vim,然后创建一个新的py文件和输入代码,如下所示:
#!/usr/bin/python2.7
# -*- coding: utf8 -*-
s = u'ޔ'
print s1。我试图用以下代码替换第2行:
import sys
reload(sys)
sys.setdefaultencoding('utf8')但这不管用,不是吗?
2。我对linux不太熟悉,我真的不知道为什么要在代码删除的开头和结尾添加_*_,当我试图用# code=utf8或# code: utf8替换# -*- coding: 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但是这些代码声明是在网站http://www.python.org/dev/peps/pep-0263/中提到的!
根据文档,允许如下代码声明:
# This Python file uses the following encoding: utf-8哎呀,这是什么?我不认为computer.what能够在世界范围内识别它,代码应该声明吗?我感到越来越困惑。
谢谢你帮忙。
发布于 2011-11-26 12:15:22
您所链接的PEP的摘要确实说明了这一切:
这个PEP建议引入一个语法来声明源文件的编码。然后,解析器使用编码信息来使用给定的编码来解释文件。最值得注意的是,这增强了对源代码中Unicode文字的解释,并使使用例如UTF-8直接在Unicode感知编辑器中编写Unicode文字成为可能。
(重点是我的)。
即使您想要做的事情已经奏效(以编程方式替换源文件的编码),它也没有任何意义。想想看:代码是静态的(不会改变)。尝试以不同的编码方式阅读它是没有意义的:只有一个正确的编码(源的作者在其中编辑源)。
至于语法:
# This Python file uses the following encoding: utf-8PEP本身说,这种语法是“没有解释器行,使用纯文本”。它是为人类而放置的。这样,如果您在文本编辑器中打开一个文件并发现它充满了胡言乱语,您就可以在它的菜单中手动设置源代码。
编辑:为什么要把编码放在# -*-和-*-之间。这纯粹是传统。第一个符号,哈希符号,告诉它是一个注释(所以它不会被编译成字节码),然后_*_只是告诉解析器特定注释是给他/她的一种方式。
这和输入你的来源没有什么不同:
# TODO: fix this nasty bug其中,TODO:部分告诉开发人员(和一些IDE),这是一条需要操作的消息。你可以用任何你想要的,包括@MarkZar或WTF!.只是个惯例!
哈哈!
发布于 2011-11-26 12:17:15
python编码声明的重要部分是coding: utf-8,它应该在第一行python代码之前的注释中,您可以随意处理注释的另一部分。
以下是PEP中描述这种行为的行:
更准确地说,第一行或第二行必须匹配正则表达式"coding:=\s*(-\w.+)“。然后将该表达式的第一组解释为编码名称。如果Python不知道编码,则会在编译期间引发错误。在包含编码声明的行中不能有任何Python语句。
发布于 2011-11-26 12:03:36
您需要这行代码,因为您需要告诉编译器源代码使用哪种编码。
https://stackoverflow.com/questions/8278264
复制相似问题