您的位置:首页 > 编程语言 > Python开发

Python里的string 和 unicode (二)

2015-07-08 15:38 791 查看
先说一下,前面提到,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

下一部分说说codec

版权声明:本文为博主原创文章,未经博主允许不得转载。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: