溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

python中bytes和str類型的區(qū)別

發(fā)布時(shí)間:2020-09-07 05:21:11 來源:腳本之家 閱讀:141 作者:思念殤千尋 欄目:開發(fā)技術(shù)

經(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í)有所幫助,也希望大家多多支持億速云。

向AI問一下細(xì)節(jié)

免責(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)容。

AI