赞
踩
一.普通解释: 如果要在python2的py文件里面写中文,则必须要添加一行声明文件编码的注释,否则python2会默认使用ASCII编码。
二.官方解释:
1. python2.1中遇到的问题:
Python 2.1 中,想要输入 Unicode 字符,只能用基于 Latin-1 的 "unicode-escape" 的方式输入 -> 对于其他非 Latin-1 的国家和用户,想要输入 Unicode 字符,就显得很繁琐,不方便。
希望是:编程人员,根据自己的喜好和需要,以任意编码方式输入字符串,都可以,这样才正常。
所以,才有人给 Python 官方建议,所以才有此PEP 0263。
此建议就是:
允许在 Python 文件中,通过文件开始处的,放在注释中的,字符串形式的,声明,声明自己的 python 文件,用何种编码。
由此,需要很多地方做相应的改动,尤其是 Python 文件的解析器,可以识别此种文件编码声明。
(1)如果没有此文件编码类型的声明,则 python 默认以ASCII编码去处理;如果你没声明编码,但是文件中又包含非ASCII编码的字符的话,python解析器去解析的 python 文件,自然就会报错了。
(2)必须放在python文件的第一行或第二行;
(3)支持的格式,可以有三种:
# coding=<encoding name>
#!/usr/bin/python # -*- coding: <encoding name> -*-
#!/usr/bin/python
# vim: set fileencoding=<encoding name> :
(4)更加精确的解释是:
符合正则表达式:"^[ \t\v]*#.*?coding[:=][ \t]*([-_.a-zA-Z0-9]+)" 就可以;
关于正则表达式的理解:
1."^"表示开始;
2."[ \t\v]"表示匹配制表符\t和垂直制表符\v,*表示匹配0次或者多次,则[ \t\v]*合起来理解就是匹配0次或者多次\t\v;
3."#"匹配#字符,即对应标题的#字符;
4.".*"表示接下来匹配任意字符,".*?"表示以非贪心算法匹配任意字符,对应标题中的“ -*- ”;
5."coding"对应标题中的coding;
6."[:=]"表示接下来的字符是":"或者"="出现的任意多个字符,对应标题中的":";
7.[ \t]*表示接下来匹配0次或者多次\t;标题中表示使用了0次;
8.[-_.a-zA-Z0-9]表示匹配出现'_'字符、小写字母'a至z'、大小字母'A至Z'、数字‘0至9’的任意多的字符,对应标题中的utf-8
9.接下来标题中的" -*- "则这个官方表达式没有给出解释,因此这个正则表达式应该是不完整的,我觉得完整的正则表达式可以为:
"^[ \t\v]*#.*?coding[:=][ \t]*([-_.a-zA-Z0-9]+).*$"
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。