您好,登錄后才能下訂單哦!
經(jīng)過一上午的查找資料。大概理清楚了bytes類型和str類型的區(qū)別。
bytes類型和str類型在呈現(xiàn)形式有相同之處,如果你print一個(gè)bytes類型的變量,會(huì)打印一個(gè)用b開頭,用單引號(hào)括起來的序列。比如:
>>> c = b'\x80abc' >>> type(c) bytes
我們看到c = b'\x80abc'表示的就是一個(gè)bytes類型。是不是和字符串很像?只是前面多出來一個(gè)b。那b'\x80abc的含義是什么呢?\x80即16進(jìn)制的兩位數(shù),代表十進(jìn)制的0-255,同時(shí)也代表一個(gè)字節(jié),8個(gè)bit。abc,即英文字母abc,為什么這里不是\x...的形式呢。因?yàn)樵趗tf-8里,一個(gè)ASCII碼 的儲(chǔ)存形式完全不變,一個(gè)a也就用一個(gè)字節(jié)來儲(chǔ)存。
那么b'\x80abc'的儲(chǔ)存情況就完全明白了,一共四個(gè)字節(jié),每個(gè)字節(jié)值的情況一目了然。下面再做一個(gè)實(shí)驗(yàn)。
>>> A = b'\xe5\x9d\x8fHello'.decode("utf-8","strict") >>> A '壞Hello' >>> type(A) str
首先要知道utf-8是可變長編碼。中文字符占3個(gè)字節(jié),‘壞'字的utf-8碼為\xe5\x9d\x8f 。那么給定一個(gè)bytes序列 b'\xe5\x9d\x8fHello', 用utf-8解碼,顯然能得到壞Hello。并且我們看到,解碼之后,A已經(jīng)變成了str類型,和預(yù)想一模一樣。
假如python無法將一個(gè)二進(jìn)制解碼成utf-8碼,則會(huì)報(bào)錯(cuò)。比如解碼b'\x80abc'則會(huì)報(bào)錯(cuò):
'utf-8' codec can't decode byte 0x80 in position 0:invalid start byte
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。