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)
哎呀,这是什么?我不认为它可以被计算机识别.代码在世界上应该声明什么?我感到越来越困惑.
感谢帮助.
您链接的 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!......只是约定!
哈!
| 归档时间: |
|
| 查看次数: |
4141 次 |
| 最近记录: |