python中bytes和str類型的區(qū)別
經(jīng)過一上午的查找資料。大概理清楚了bytes類型和str類型的區(qū)別。
bytes類型和str類型在呈現(xiàn)形式有相同之處,如果你print一個bytes類型的變量,會打印一個用b開頭,用單引號括起來的序列。比如:
>>> c = b'\x80abc' >>> type(c) bytes
我們看到c = b'\x80abc'表示的就是一個bytes類型。是不是和字符串很像?只是前面多出來一個b。那b'\x80abc的含義是什么呢?\x80即16進制的兩位數(shù),代表十進制的0-255,同時也代表一個字節(jié),8個bit。abc,即英文字母abc,為什么這里不是\x...的形式呢。因為在utf-8里,一個ASCII碼 的儲存形式完全不變,一個a也就用一個字節(jié)來儲存。
那么b'\x80abc'的儲存情況就完全明白了,一共四個字節(jié),每個字節(jié)值的情況一目了然。下面再做一個實驗。
>>> A = b'\xe5\x9d\x8fHello'.decode("utf-8","strict") >>> A '壞Hello' >>> type(A) str
首先要知道utf-8是可變長編碼。中文字符占3個字節(jié),‘壞'字的utf-8碼為\xe5\x9d\x8f 。那么給定一個bytes序列 b'\xe5\x9d\x8fHello', 用utf-8解碼,顯然能得到壞Hello。并且我們看到,解碼之后,A已經(jīng)變成了str類型,和預(yù)想一模一樣。
假如python無法將一個二進制解碼成utf-8碼,則會報錯。比如解碼b'\x80abc'則會報錯:
'utf-8' codec can't decode byte 0x80 in position 0:invalid start byte
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python調(diào)用百度AI實現(xiàn)圖片上文字識別功能實例
百度AI功能還是很強大的,百度AI開放平臺真的是測試接口的天堂,免費接口很多,當然有量的限制,但個人使用是完全夠用的,下面這篇文章主要給大家介紹了關(guān)于Python調(diào)用百度AI實現(xiàn)圖片上文字識別功能的相關(guān)資料,需要的朋友可以參考下2021-09-09python GUI庫圖形界面開發(fā)之PyQt5單行文本框控件QLineEdit詳細使用方法與實例
這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5單行文本框控件QLineEdit詳細使用方法與實例,需要的朋友可以參考下2020-02-02淺談pandas.cut與pandas.qcut的使用方法及區(qū)別
這篇文章主要介紹了淺談pandas.cut與pandas.qcut的使用方法及區(qū)別,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03