Python的字串編碼

2022-03-30 04:42:22 字數 2140 閱讀 2627

本文用實驗詳細地演示了python2和python3在字串編碼上的區別。

在python2中,字串字面量對應於8位的字元或面向位元組編碼的位元組字面量。這些字串的乙個重要限制是它們無法完全地支援國際字符集和unicode編碼。為了解決這種限制,python2對unicode資料使用了單獨的字串型別。要輸入unicode字串字面量,要在第乙個引號前加上前最'u'。

python2中還有一種稱為位元組字面量的字串型別,它是指乙個已經編碼的字串字面量,在python2中位元組字面量和普通字串沒有差別,因為在python2中普通字串實際上就是已經編碼(非unicode)的位元組字串。

在python3中,不必加入這個字首字元,否則是語法錯誤,這是因為所有的字串預設已經是unicode編碼了。如果使用-u選項執行直譯器,python2會模擬這種行為(即所有字串字面量將被作為unicode字元對待,u字首可以省略)。在python3中,位元組字面量變成了與普通字串不同的型別。

>>> '張俊' #python2 會自動將字串轉換為合適編碼的位元組字串

'\xe5\xbc\xa0\xe4\xbf\x8a' #自動轉換為utf-8編碼的位元組字串

>>> u'張俊' #顯式指定字串型別為unicode型別, 此型別字串沒有編碼,儲存的是字元在unicode字符集中的**點(序號)

u'\u5f20\u4fca'

>>> '張俊'.encode('utf-8')  #python2 已經自動將其轉化為utf-8型別編碼,因此再次編碼(python2會將該字串當作用ascii或unicode編碼過)會出現錯誤。

traceback (most recent call last):

file "", line 1, in

unicodedecodeerror: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)

>>> '張俊'.decode('utf-8')  #python2 可以正常解碼,返回的字串類是無編碼的unicode型別

u'\u5f20\u4fca'

>>> b'張俊'   # 『張俊' 已被python2轉換為utf-8編碼,因此已為位元組字串

'\xe5\xbc\xa0\xe4\xbf\x8a'

>>> print '張俊'

張俊》 print u'張俊'

張俊》 print b'張俊'

張俊》 

>>> '張俊' #python3的字串預設為unicode格式(無編碼)

'張俊'

>>> u'張俊' #由於預設為unicode格式,因此字串不用像python2一樣顯式地指出其型別,否則是語法錯誤。

file "", line 1

u'張俊'

^syntaxerror: invalid syntax

>>> type('張俊') #python3中文字字串和位元組字串是嚴格區分的,預設為unicode格式的文字字串

>>> '張俊'.decode('utf-8') #因為預設的文字字串為unicode格式,因此文字字串沒有decode方法

traceback (most recent call last):

file "", line 1, in

attributeerror: 'str' object has no attribute 'decode'

>>> '張俊'.encode('utf-8') #將文字字串編碼,轉換為已編碼的位元組字串型別

b'\xe5\xbc\xa0\xe4\xbf\x8a'

>>> type('張俊'.encode('utf-8'))

>>> print ('張俊'.encode('utf-8')) #對於已編碼的位元組字串,文字字串的許多特性和方法已經不能使用。

b'\xe5\xbc\xa0\xe4\xbf\x8a'

>>>print ('張俊'.encode('utf-8'))

b'\xe5\xbc\xa0\xe4\xbf\x8a'

>>> print ('張俊'.encode('utf-8').decode('utf-8'))  #必須將位元組字串解碼後才能列印出來

張俊

Python字串編碼

在python中有些特殊的地方是存在兩種字串,分別為str和unicode字串,他們都繼承自basestring。如 s hello world s為str us u hello world us為unicode。使用help str 和help unicode 可以檢視各自說明,他們都有decod...

python字串編碼

常見字元編碼型別 ascii 美國資訊交換標準碼,是目前計算機中最廣泛使用的字符集編碼。每個 ascii 碼以 1 個位元組 儲存,例如數字字元 0 的 ascii 碼是 0110000,十進位制表示為 48。unicode 為解決世界上上百種語言帶來混合 衝突,各國有各國的標準,顯示很容易出現亂碼...

Python字串 編碼

字串str 作用 用來記錄文字資訊 字面值表示方法 用引號括起來的部分都是字串 單引號 雙引號 三單引號 三雙引號 空字串 字串的字面值表示方式 hello hello hello hello 單引號和雙引號的區別 單引號內的雙引號不算結束符 雙引號內的單引號不算結束符 三引號的作用 三引號內可以包...