python3 bytes數據類型探討
阿新 • • 發佈:2018-12-27
而是 占用 直接 二進制 之間 一段 gbk 編碼 編碼格式 為單位處理的
表示這是一個(2)使用
python3中str和bytes分開了,那麽bytes與str之間到底是什麽關系呢?下面從表現形式、處理方式、存儲形式三個方面來闡述其區別
1. 在字符串前面加上b,就表示bytes數據類型
1 s1 = "hello" 2 b1 = b"hello" # 前面加上b讓它變成bytes類型 3 print(s1) 4 print(b1)
輸出
s1 = "hello" b1 = b"hello" # 前面加上b讓它變成bytes類型 print(s1) print(b1)
2. 字符串是以字符為單位進行處理的,bytes類型是以字節為單位處理的。
python3中bytes類型主要用於網絡傳輸和硬盤存儲,是以字節
3. 字符串的編碼方法只能是Unicode,bytes可以是gbk,utf-8或其他非Unicode形式。bytes類型只負責以二進制字節序列的形式記錄信息,至於該二進制序列表示什麽信息(比如到底是什麽字符)由編碼形式決定
python3中對str和bytes做了嚴格區分,文本總是用str類型表示,編碼方式是Unicode,二進制數據則用bytes類型表示。下麥呢來看一段代碼
1 s = "hello中國" 2 b = s.encode("utf-8") 3 print(b) 4 for i in b: # bytes類型也是可叠代對象,是不是很神奇 5 print(i) 6 for i in b: 7 print(bin(i))
輸出
b‘hello\xe4\xb8\xad\xe5\x9b\xbd‘ 104 101 108 108 111 228 184 173 229 155 189 0b1101000 0b1100101 0b1101100 0b1101100 0b1101111 0b11100100 0b10111000 0b10101101 0b11100101 0b10011011 0b10111101 Process finished with exit code 0
bytes實際上是一串0和1的組合,但為了在ide環境中讓我們相對直觀的觀察,它被表現成了b‘\xe4\xb8\xad\xe6\x96\x87‘
這種形式,開頭的b
bytes
類型。\xe4
是十六進制的表示方式,它占用1個字節的長度。bytes
是一種比特流,它的存在形式是01010001110這種。我們無論是在寫代碼,還是閱讀文章的過程中,肯定不會有人直接閱讀這種比特流,它必須有一個編碼方式,使得它變成有意義的比特流,而不是一堆晦澀難懂的01組合。
字符串有一個encode()方法,與bytes的decode方法相對應,利用這兩個方法可以實現字符串與bytes類型的轉化
1 s1 = "hello" 2 b1 = s1.encode("utf-8") 3 print(b1) 4 s2 = b1.decode("utf-8") 5 print(s2)
輸出
b‘hello‘ hello Process finished with exit code 0
還有一種方法,就是利用調用bytes()類和str()類來完成轉化
1 b1 = bytes(s1, encoding="utf-8") 2 print(b1) 3 s2 = str(b1, encoding="utf-8") 4 print(s2)
輸出‘
b‘hello‘ hello Process finished with exit code 0
實際上,我們知道,所有數據包括字符串,存儲到硬盤上都是以0101的形式,也都需要編碼解碼。關於bytes和str,只需記住這幾句話:
(1)在將字符串存入磁盤和從磁盤讀取字符串的過程中,Python自動地幫你完成了編碼和解碼的工作,你不需要關心它的過程;
(2)使用bytes
類型,實質上是告訴Python,不需要它幫你自動地完成編碼和解碼的工作,而是用戶自己手動進行,並指定編碼格式;
(3)bytes類型主要用於網絡傳輸和硬盤存儲
python3 bytes數據類型探討