20130703-Python中文乱码处理

来源:互联网 发布:淘宝小样能买到正品吗 编辑:程序博客网 时间:2024/06/05 17:29
Python中文乱码

背景:

系统编码方式:utf-8

bug信息:

f = open("hehe", 'r')for s in f:  print s.encode('utf-8')  #错误行

python解释器报:'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)

原因:

错误行调用encode()之前,先调用decode()对s进行解码,由于默认调用decode,python使用其默认编码方式ascii进行解码,导致错误。

bug修复(一)

代码内重新设置默认编码方式

import sysCODE = 'utf-8'reload(sys)sys.setdefaultencoding(CODE)  #修改系统默认编码f = open("hehe", 'r')for s in f:  print s.encode('utf-8')

说明:

在执行setdefaultencoding(CODE)前一定要先reload(sys),否则报AttributeError没有此属性。引文python解释器在加载完当前环境后,就del sys.setdefaultencoding,卸载掉了此属性。

bug修复(二)

修改python系统文件,将默认编码方式设置为utf8

在python的运行时环境下的site-packages文件夹下新建一个sitecustomize.py,文件内容如下

#encoding=utf8import sysreload(sys)sys.setdefaultencoding('utf8')del sys.setdefaultencoding

说明:

确定当前python的执行环境,可使用代码

from distutils.sysconfig import get_python_libprint get_python_lib()