一、bytes類型
bytes類型是指一堆字節的集合,在python中以b開頭的字符串都是bytes類型。例如:
>>> a = "中國" >>> a.encode("utf-8") b'\xe4\xb8\xad\xe5\x9b\xbd'
py3中字符串都是Unicode編碼,顯示正常字符,其余編碼的數據都以bytes類型顯示。
bytes類型的作用:
計算機只能存儲2進制, 我們的字符、圖片、視頻、音樂等想存到硬盤上,也必須以正確的方式編碼成2進制后再存。
對於文字,我們可以以gbk編碼,也可以以utf-8、ASCII編碼。
對於圖片,必須編碼成PNG,JPEG等格式
對於音樂,必須編碼成MP3,WAV等...
在python中, 數據轉成2進制后不是直接以0101010的形式表示的,而是用一種叫bytes(字節)的類型來表示,其中用16進制表示的二進制字節,即一個16進制表示四位二進制,2個16進制代表一個字節。
在python中,字符串必須編碼成bytes后才能存到硬盤上。如果不在文件頭聲明編碼,python3在文件存儲中默認用utf-8編碼。
另外,python中,字符的編碼例如gbk、utf-8、ASCII等還可以識別轉換,而圖片、音樂、視頻等,編碼不能識別,只能以bytes形式出現,傳輸存儲。
二、python中編碼的轉換方法
編碼轉換是指將一種編碼轉成另外一種編碼,比如 utf-8 to gbk。
編碼轉換的作用:
不同操作系統編碼不同, utf-8在win上沒辦法直接看,因為windows是GBK編碼的,得轉成gbk。
反過來如果你的GBK字符相在Linux\Mac上正常顯示,就得轉成utf-8編碼。
另外,或者在python中將字符串定義直接定義為unicode編碼,引號前加u,在任何系統都正常顯示:
a = u"word" >>> a u'word' >>> type(a) <type 'unicode'>
編碼轉換的方法:
decode()解碼,encode()編碼
UTF-8 --> decode 解碼 --> Unicode
Unicode --> encode 編碼 --> GBK / UTF-8
例如:
>>> a = "中國" >>> b = a.encode("utf-8") >>> print(b) b'\xe4\xb8\xad\xe5\x9b\xbd' >>> b.decode("utf-8") '中國'
注:以什么編碼,就要以什么解碼,要不然就出錯或者亂碼了