python中bytes和str型別的區別

2022-09-26 19:42:16 字數 921 閱讀 4124

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

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

>>> c = b'\x80abc'

>>> twww.cppcns.comype(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 = bngezn'\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'\xwww.cppcns.com80abc'則會報錯:

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

本文標題: python中bytes和str型別的區別

本文位址:

python中string和bytes互轉

首先來設定乙個原始的字串,python 3.2.3 default,apr 11 2012,07 15 24 msc v.1500 32bit intel on win32 type help credits or license for more information.website type ...

Python3中bytes和HexStr之間的轉換

在python運算元據內容時,多數情況下可能遇到下面3種型別的資料處理 hexstring 如 1c532145697a8b6f str 如 x1c x53 x21 x45 x69 x7a x8b x6f list 如 0x1c,0x53,0x21,0x45,0x69,0x7a,0x8b,0x6f ...

python3 中bytes和str型別

轉 python 3最重要的新特性之一是對字串和二進位制資料流做了明確的區分。文字總是unicode,由str型別表示,二進位制資料則由bytes型別表示。python 3不會以任意隱式的方式混用str和bytes,你不能拼接字串和位元組流,也無法在位元組流裡搜尋字串 反之亦然 也不能將字串傳入引數...