0%

记Python中一个编码的错误

提示:这个应该仅仅是在Python2中出现这个问题。因为Python2的默认编码是ascii,Python3的默认编码已经编程了utf-8

我在Linux中使用make html的时候,提示:

1
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)

一直不知道是什么原因,通过查阅一个资料,才知道,原来是编码问题。

字符串在进行unicode的时候,要使用什么编码格式进行转换呢?utf-8?gb2312?utf-16?这个时候就要根据 sys.getdefaultencoding()来确定了。而sys.getdefaultencoding()ascii编码,在ascii字符表中不存在0xe5这种大于128的字符存在。所以当然会报错。

可以这样修改:

1
#coding:utf-8
2
import sys 
3
reload(sys) 
4
sys.setdefaultencoding("utf-8")

而因为我是使用的make html,通过查找,发现是/usr/bin/sphinx-build这个文件在捣鬼。所以我修改这个文件就好了。

1
#!/usr/bin/python
2
3
# -*- coding: utf-8 -*-
4
import re
5
import sys
6
reload(sys) #新添加的
7
sys.setdefaultencoding("utf-8") #新添加的
8
from sphinx import main
9
10
if __name__ == '__main__':
11
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
12
    sys.exit(main())

这样就正常了。

http://my.oschina.net/leejun2005/blog/74430