python中string和Unicode的區別

2021-07-13 21:24:13 字數 1938 閱讀 4314

首先要弄清楚的是,在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...