Python 2.X 在输入汉字和特殊字符的时候,经常遇到编码解码的问题,究其原因,编译器默认将文件当做ascii编码,因此要正确的实现编解码的转换,需要进行一些设置。
首先让我们来了解几个概念。
在python文件开头加上# –– coding: utf-8 –– 来识别中文并能够把中文正确的转换为unicode。
修改python的默认系统编码
>>> import sys,locale
>>> sys.getdefaultencoding()
'ascii'
>>> sys.setdefaultencoding()? #这里会报错,找不到setdefaultencoding()函数
Traceback (most recent call last):
? File "", line 1, in
AttributeError: 'module' object has no attribute 'setdefaultencoding'
>>> reload(sys) #需要reload。
>>> locale.getdefaultlocale()
('zh_CN', 'UTF-8')
>>> sys.setdefaultencoding("UTF-8") #把编码与操作系统统一起来
>>> sys.getdefaultencoding()
'UTF-8'
之所以要reload(sys),因为python环境在初始化的时候要执行site.py这个文件,而为了防止用户修改python的默认编码,在site.py文件中会把setdefaultencoding()函数del 掉,因此我们必须通过reload(sys)把这个函数找回来。 有兴趣的不妨自己试一下:
先rpm -qa|grep python26 找到python的包
然后rpm -q -l python26-2.6.8-1.el5|grep site.py 找到site.py文件的位置
我的机器上是:/usr/lib64/python2.6/site.py
vi打开,main函数里面,有一段:
重新reload一下sys,把setdefaultencoding函数给找回来。再setdefaultencoding就对了。
环境设置正确后,就可以进行编码转换了。python中的编码转换用decode和encode来实现,unicode编码可以认为是各种编码之间转换的桥梁。
Python3中,已经默认采用utf8编码了。