注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

More Than Programmer

do more and more,beyond programmer... ..

 
 
 

日志

 
 
关于我

每天进步一点,让自己活得充实!

网易考拉推荐
 
 

string 和 unicode  

2008-11-03 15:08:14|  分类: Python |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
先说一下,前面提到,print(string)的时候,如果string是按当前环境编码方式编码的,可以正常输出,不会乱码;如果string不是当 前编码的,就会乱码。而print(unicode)是不会乱码的。why?应为print(unicode)的时候,会把unicode先转成当前编 码,然后再输出。我没看过print的源码,不过估计是这样的。

string转unicode或者unicode转string,是很常见的操作。

string和unicode都有decode()和encode()方法。decode是string2unicode,encode自然就是unicode2string。看个例子(中文Windows2003下):
>>> a = '你好'
>>> a
'\xc4\xe3\xba\xc3'
>>> b = u'你好'
>>> c = a.decode('gbk') #gbk string to unicode
>>> b == c
True
>>> c
u'\u4f60\u597d'
>>> d = b.encode('gbk') #unicode to gbk string
>>> d == a
True
>>> d
'\xc4\xe3\xba\xc3'
>>> e = b.encode('utf-8') #unicode to utf-8 string
>>> e
'\xe4\xbd\xa0\xe5\xa5\xbd'

decode或者encode的时候,如果不指定编码方式,会按照缺省编码方式来处理。查看、设置缺省编码方式可以这样做:
>>> import sys
>>> sys.getdefaultencoding()
'ascii'
>>> reload(sys)
<module 'sys' (built-in)>
>>> sys.setdefaultencoding('gbk')
上 面调用sys.setdefaultencoding()的时候先reload一下sys module,原因是python启动时缺省会import site.py, 而site.py会del sys.setdefaultencoding(),所以需要reload(sys)。具体可以看看site.py的源码。

接下来说说unicode()函数。其实unicode函数就是调用string的decode()方法,把string转成unicode,例如:
>>> a = '你好'
>>> b = unicode(a)
>>> b
u'\u4f60\u597d'
>>> c = a.decode('gbk')
>>> c
u'\u4f60\u597d'
>>> print b, c, b==c
你好 你好 True
  评论这张
 
阅读(1378)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017