[转]Python: python编码问题

这是一个我们在处理中文时, 经常遇到的问题.

 

python里面基本上要考虑三种编码格式

1 源文件编码
在文件头部使用coding声明。告诉python解释器该代码文件所使用的字符集。

2 内部编码
代码文件中的字符串,经过decode以后,被转换为统一的unicode格式的内部数据,类似于u'*'。unicode数据可以使用encode函数,再自由转换为其他格式的数据,相当于一个统一的平台。

直接输入unicode数据
>>> u'你好'
u'/u4f60/u597d'

将unicode数据转换为gb2312格式
>>> u'你好'.encode('gb2312')
'/xc4/xe3/xba/xc3'

将输入的gb2312格式的数据解码为unicode
>>> '你好'.decode('gb2312')
u'/u4f60/u597d'
输入数据的格式取决于所用shell终端的编码设置,本例中为zh_CN
[root@chenzheng python]# echo $LANG
zh_CN

解码同时转换为utf8
>>> '你好'.decode('gb2312').encode('utf8')
'/xe4/xbd/xa0/xe5/xa5/xbd'

3 外部输入的编码
其实这个和在python交互shell中输入的字符串,所遇到的情况基本一样。但程序中常常用到从网络,文件读取的数据,故此单独列出,需要特别注意其编码格式是否于系统要求相符。

下面是baidu中文本周金曲榜的链接,返回一个xml文件,编码格式为gb2312
http://box.zhangmen.baidu.com/x?op=4&listid=1

由于xml.etree.EelementTree.parse()不识别gb2312编码,在解析的时候,需要将其转换utf8格式才可以,可以使用下面的函数


另外,可以使用一个小函数来判断数据的编码格式:

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jiyucn/archive/2008/02/16/2100006.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值