Python的字符串類型是str,在內(nèi)存中以Unicode表示,一個字符對應(yīng)若干個字節(jié)。如果要在網(wǎng)絡(luò)上傳輸,或者保存到磁盤上,就需要把str變?yōu)橐宰止?jié)為單位的bytes。
Python對bytes類型的數(shù)據(jù)用帶b前綴的單引號或雙引號表示:
x = b'ABC'
要注意區(qū)分'ABC'和b'ABC',前者是str,后者雖然內(nèi)容顯示得和前者一樣,但bytes的每個字符都只占用一個字節(jié)。
以Unicode表示的str通過encode()方法可以編碼為指定的bytes,例如:
--->bytes
>>> 'ABC'.encode('ascii')
b'ABC'
>>> '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87
--->str
如果我們從網(wǎng)絡(luò)或磁盤上讀取了字節(jié)流,那么讀到的數(shù)據(jù)就是bytes。要把bytes變?yōu)閟tr,就需要用decode()方法:
>>> b'ABC'.decode('ascii')
'ABC'
>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
'中文'
如果bytes中包含無法解碼的字節(jié),decode()方法會報錯
bytes中只有一小部分無效的字節(jié),可以傳入errors='ignore'忽略錯誤的字節(jié):
>>> b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore')
'中'
當str和bytes互相轉(zhuǎn)換時,需要指定編碼。最常用的編碼是UTF-8。Python當然也支持其他編碼方式,比如把Unicode編碼成GB2312:
>>> '中文'.encode('gb2312')
b'\xd6\xd0\xce\xc4'
但這種方式純屬自找麻煩,如果沒有特殊業(yè)務(wù)要求,請牢記僅使用UTF-8編碼。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報。