1. 程式人生 > >Python裡的string 和 unicode (二)

Python裡的string 和 unicode (二)

繼續。

先說一下,前面提到,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