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') '中' 當(dāng)str和bytes互相轉(zhuǎn)換時,需要指定編碼。最常用的編碼是UTF-8。Python當(dāng)然也支持其他編碼方式,比如把Unicode編碼成GB2312: >>> '中文'.encode('gb2312') b'\xd6\xd0\xce\xc4' 但這種方式純屬自找麻煩,如果沒有特殊業(yè)務(wù)要求,請牢記僅使用UTF-8編碼。 |
|