文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>python 字符串编码处理心得

python 字符串编码处理心得

时间:2010-04-10  来源:yorks

    今天用pyQT写了一个登录e100的发短信的工具。发现在对lable setText的时候出现了乱码的现象,便重新找了找关于python字符串的编码说明之类的。


心得如下:

  • python内部用的是unicode.
  • 给pyQT界面输出中文的时候也必须为unicode
  • decode可以用来将str转换为unicode
  • 要想从一个可读编码转换为另外一个可读编码一定要先转为unicode再转为另外的可读编码
  • encode则是将unicode转换为我们可以读懂的一般编码如(utf8, gb2312)

下面说说例子吧:
1、decode用法(将str转换为unicode)

str=’中文’
unicodeStr=str.decode(‘utf-8′) #从utf-8的编码转换为unicode


2、encode用法(将unicode转换为可读编码e.g.:utf-8,gbk)

strU=u’中文’
strU.encode(‘utf-8′)#将strU的unicode转为utf-8编码


3、判断str是否为unicode

isinstance(status, unicode)#如果是unicode返回True


在来看一个总的例子:(本机环境:utf-8编码)

[yorks@localhost ~]$ python
Python 2.5.4 (r254:67916, May 4 2009, 17:05:01)
[GCC 4.4.0 20090421 (Everest 4.4.0-6)] on linux2
Type “help”, “copyright”, “credits” or “license” for more information.
>>> str=”中文” #utf-8编码的中文
>>> str
‘\xe4\xb8\xad\xe6\x96\x87′ #可见utf-8存储的一个中文3位哟 :-)
>>> print str
中文
>>> unicodeStr=str.decode(‘utf-8′)#从utf-8中转换为unicode
>>> unicodeStr
u’\u4e2d\u6587′ #前面多了个u,说明是unicode字符窗了
>>> print unicodeStr
中文 #证明 print函数不管是否为unicode都可以正常显示
>>> str2=unicodeStr.encode(‘utf-8′) #将unicode字符转换回utf-8编码
>>> str2
‘\xe4\xb8\xad\xe6\x96\x87′ #和前面的str一样
>>> print str2
中文
>>> strU=u’中文’ #自己定义为unicode编码
>>> strU
u’\u4e2d\u6587′
>>> unicodeStr_gb=str.decode(‘gb2312′) #试试从gb2312编码中转为unicode
Traceback (most recent call last): #报错了喔,因为str本身是utf-8编码的
File “”, line 1, in #所以decode只能通过str本生的编码转换
UnicodeDecodeError: ‘gb2312′ codec can’t decode bytes in position 2-3: illegal multibyte sequence
>>> str2_gb=unicodeStr.encode(‘gb2312′) #将unicode的编码转换为gb2312
>>> str2_gb
‘\xd6\xd0\xce\xc4′ #可见gb2312的编码中,一个中文为两位
>>> print str2_gb #乱码了吧。因为我的环境是utf-8的

>>>


总结:
   首先知道源str是什么字符编码;然后根据需要转换为自己想要的字符编码。
   如果str是unicode则,可以直接利用encode转换为你想要的可读编码。
   如果是str是utf-8,则先要decode转换为unicode,然后再转换为想要的可读编码。
   其它gb…同utf-8.
相关阅读 更多 +
排行榜 更多 +
百炼英雄抽卡技巧指南

百炼英雄抽卡技巧指南

休闲益智 下载
英雄没有闪滚雷旋风技能如何搭配

英雄没有闪滚雷旋风技能如何搭配

休闲益智 下载
英雄没有闪雷旋风BD构筑推荐

英雄没有闪雷旋风BD构筑推荐

休闲益智 下载