Chinaunix首页 | 论坛 | 博客
  • 博客访问: 162933
  • 博文数量: 27
  • 博客积分: 2179
  • 博客等级: 大尉
  • 技术积分: 335
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-21 12:53
文章分类

全部博文(27)

文章存档

2012年(1)

2010年(9)

2009年(7)

2008年(10)

我的朋友

分类: LINUX

2010-04-10 16:07:42

    今天用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的

阅读(2268) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~