首先要弄清楚的是,在python裡,string object和unicode object是兩種不同的型別。
string object是由characters組成的sequence,而unicode object是unicode code units組成的sequence。
string裡的character是有多種編碼方式的,比如單位元組的ascii,雙位元組的gb2312等等,再比如utf-8。很明顯要想解讀string,必需知道string裡的character是用哪種編碼方式,然後才能進行。
unicode code unit又是什麼東西呢?乙個unicode code unit是乙個16-bit或者32-bit的數值,每個數值代表乙個unicode符號。在python裡,16-bit的unicode,對應的是ucs2編碼。32-bit對應的是ucs4編碼。是不是感覺string裡character的編碼沒什麼區別?反正我現在腦子裡就是這樣乙個印象:在python裡,ucs2或者ucs4編碼的,我們叫做unicode object,其他編碼的我們就叫做string。
至於python裡的unicode到底是ucs2還是ucs4的,可以在編譯時指定。例如linux下,要用ucs2做unicode的編碼,可以這樣
# ./configure --enable-unicode=ucs2
# make
# make install
下面我們看看string和unicode在python裡的不同
我們先看看在簡體中文windows 2003系統下,系統編碼是gbk
>>> a = '你好'
>>> a
'/xc4/xe3/xba/xc3'
>>> b = u'你好'
>>> b
u'/u4f60/u597d'
>>> print a
你好》 print b
你好》 a.__class__
>>> b.__class__
>>> len(a)
4>>> len(b)
2在乙個系統編碼為utf-8的linux環境下
>>> a = '你好'
>>> a
'/xe4/xbd/xa0/xe5/xa5/xbd'
>>> b = u'你好'
>>> b
u'/u4f60/u597d'
>>> print a
你好》 print b
你好》 a.__class__
>>> b.__class__
>>> len(a)
6>>> len(b)
2如何?簡單總結一下:
1、string直接用引號來表示,unicode在引號前加乙個u
2、直接輸入的string常量會用系統預設編碼方式來編碼,例如在gbk環境下,'你好'會編碼成'/xc4/xe3/xba/xc3',而在utf-8環境下就成了'/xe4/xbd/xa0/xe5/xa5/xbd'。
3、len(string)返回string的位元組數,len(unicode)返回的是字元數
4、很重要的一點,print unicode不會亂碼。現在我們常用的linux、windows系統,都是支援unicode的,版本太老的不算。比如windows 2003支援ucs2,所以在中文windows2003下,除了可以正常顯示預設的gbk編碼外,還可以正常顯示ucs2編碼。舉個例子,還是在中文windows 2003的gbk環境下:
>>>a = '/xe4/xbd/xa0/xe5/xa5/xbd' # utf-8的'你好'
>>> print a
浣犲ソ>>> b = unicode(a, "utf-8")
>>> b
u'/u4f60/u597d'
>>> print b
你好應該明白了吧?
下面再說說string和unicode的相互轉換,什麼unicode()、decode()、encode()、codecs之類的。
python中string和bytes互轉
首先來設定乙個原始的字串,python 3.2.3 default,apr 11 2012,07 15 24 msc v.1500 32bit intel on win32 type help credits or license for more information.website type ...
C 中string和String的區別
string是string的別名。string是c 中的類,string是.net framework的類 在c ide中不會顯示藍色 c string對映為.net framework的string 如果用string,編譯器會把它編譯成string,所以如果直接用string就可以讓編譯器少做一...
C 中String和string的區別
在c 程式設計時,有時碰到string,有時碰到string,可是感覺二者都可以,所以決定總結下二者的區別。msdn microsoft developers network 中對string的說明 stringis analiasforstringin the net framework。即str...