Python3的bytes/str之别
Python 3最重要的新特性大概要算是對(duì)文本和二進(jìn)制數(shù)據(jù)作了更為清晰的區(qū)分。文本總是Unicode,由str類型表示,二進(jìn)制數(shù)據(jù)則由bytes類型表示。Python 3不會(huì)以任意隱式的方式混用str和bytes,正是這使得兩者的區(qū)分特別清晰。你不能拼接字符串和字節(jié)包,也無法在字節(jié)包里搜索字符串(反之亦然),也不能將字符串傳入?yún)?shù)為字節(jié)包的函數(shù)(反之亦然)。這是件好事。
不管怎樣,字符串和字節(jié)包之間的界線是必然的,下面的圖解非常重要,務(wù)請(qǐng)牢記于心:
字符串可以編碼成字節(jié)包,而字節(jié)包可以解碼成字符串。
>>>'€20'.encode('utf-8') b'\xe2\x82\xac20'>>> b'\xe2\x82\xac20'.decode('utf-8')
'€20'
?
這個(gè)問題要這么來看:字符串是文本的抽象表示。字符串由字符組成,字符則是與任何特定二進(jìn)制表示無關(guān)的抽象實(shí)體。在操作字符串時(shí),我們生活在幸福的無知之中。我們可以對(duì)字符串進(jìn)行分割和分片,可以拼接和搜索字符串。我們并不關(guān)心它們內(nèi)部是怎么表示的,字符串里的每個(gè)字符要用幾個(gè)字節(jié)保存。只有在將字符串編碼成字節(jié)包(例如,為了在信道上發(fā)送它們)或從字節(jié)包解碼字符串(反向操作)時(shí),我們才會(huì)開始關(guān)注這點(diǎn)。
傳入encode和decode的參數(shù)是編碼(或codec)。編碼是一種用二進(jìn)制數(shù)據(jù)表示抽象字符的方式。目前有很多種編碼。上面給出的UTF-8是其中一種,下面是另一種:
>>>'€20'.encode('iso-8859-15') b'\xa420' >>> b'\xa420'.decode('iso-8859-15') '€20'?
編碼是這個(gè)轉(zhuǎn)換過程中至關(guān)重要的一部分。離了編碼,bytes對(duì)象b'\xa420'只是一堆比特位而已。編碼賦予其含義。采用不同的編碼,這堆比特位的含義就會(huì)大不同:
>>> b'\xa420'.decode('windows-1255') '?20'?
轉(zhuǎn)載于:https://www.cnblogs.com/PythonCai/p/9401305.html
總結(jié)
以上是生活随笔為你收集整理的Python3的bytes/str之别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 核高基是什么意思?
 - 下一篇: Python关于Threading暂停恢