1. 程式人生 > 程式設計 >python中bytes和str型別的區別

python中bytes和str型別的區別

經過一上午的查詢資料。大概理清楚了bytes型別和str型別的區別。

bytes型別和str型別在呈現形式有相同之處,如果你print一個bytes型別的變數,會列印一個用b開頭,用單引號括起來的序列。比如:  

>>> c = b'\x80abc'
>>> type(c)
bytes

我們看到c = b'\x80abc'表示的就是一個bytes型別。是不是和字串很像?只是前面多出來一個b。那b'\x80abc的含義是什麼呢?\x80即16進位制的兩位數,代表十進位制的0-255,同時也代表一個位元組,8個bit。abc,即英文字母abc,為什麼這裡不是\x...的形式呢。因為在utf-8裡,一個ASCII碼 的儲存形式完全不變,一個a也就用一個位元組來儲存。

那麼b'\x80abc'的儲存情況就完全明白了,一共四個位元組,每個位元組值的情況一目瞭然。下面再做一個實驗。

>>> A = b'\xe5\x9d\x8fHello'.decode("utf-8","strict")
>>> A
'壞Hello'
>>> type(A)
str

首先要知道utf-8是可變長編碼。中文字元佔3個位元組,‘壞'字的utf-8碼為\xe5\x9d\x8f 。那麼給定一個bytes序列 b'\xe5\x9d\x8fHello', 用utf-8解碼,顯然能得到壞Hello。並且我們看到,解碼之後,A已經變成了str型別,和預想一模一樣。

假如python無法將一個二進位制解碼成utf-8碼,則會報錯。比如解碼b'\x80abc'則會報錯:

  'utf-8' codec can't decode byte 0x80 in position 0:invalid start byte

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。