python的Bytes類型
一、總結
一句話總結:
在python中,數據轉成2進制后不是直接以010101的形式表示的,而是用一種叫bytes(字節)的類型來表示的。 例如 b'\xe8\x87\xaa\xe5
1、python中,轉化成bytes的方式?
encode("utf-8"),解碼的話就是decode("utf-8")
# 獲取一個post請求 import urllib.parse data = bytes(urllib.parse.urlencode({"hello":"world"}),encoding="utf-8") response = urllib.request.urlopen("http://httpbin.org/post",data=data) print(response.read().decode("utf-8"))
二、python的Bytes類型
轉自或參考:Bytes類型 - Kwan、C - 博客園
https://www.cnblogs.com/Kwan-C/p/11480678.html
一、定義
bytes類型是指一堆字節的集合,在python中以b開頭的字符串都是bytes類型。
b'\xe5\xb0\x8f\xe7\x8c\xbf\xe5\x9c\x88'
'''
b開頭的都代表是bytes類型,是以16進制來顯示的,2個16進制代表一個字節。
utf-8是3個字節代表一個中文,所以以上正好是9個字節
'''
二、Bytes類型的作用
計算機只能存儲2進制,要想將字符、圖片、視頻、音樂等存在硬盤上,也必須以正確的方式編碼成2進制后再存儲。
-
對於文字,我們可以用gbk編碼,也可以用utf-8、ASCII編碼。
-
對於圖片,必須編碼成PNG,JPEG等格式。
-
對於音樂,必須編碼成MP3,WAV等。
在python中,數據轉成2進制后不是直接以010101的形式表示的,而是用一種叫bytes(字節)的類型來表示的。字符串轉成bytes后長成這個樣子:
s = '小明'
a = s.encode('utf-8')
print(a)
在python中,字符串必須編碼成bytes后才能存到硬盤上,但是為什么之前學的文件操作並沒有把字符串編碼后再存儲?那是因為python默認幫你干了這個事了,如python3中文件存儲的默認編碼是utf-8。
當然,你可以自行改變文件的默認編碼。
f = open(file="encode_test",encoding="gbk",mode="w")
這樣,你寫入的數據就是按gbk編碼的了。
三、以二進制模式操作文件
當然,在打開文件時如果你不想讓open這個對象幫你自動編碼,你也可以直接往文件里存入bytes數據。
f = open(file="encode_test",mode="wb") # wb以2進制模式打開文件
s = "自學編程,誰不上小猿圈".encode("utf-8") # 自行編碼
print(s )
f.write(s)
f.close()
輸出結果:
b'\xe8\x87\xaa\xe5\xad\xa6\xe7\xbc\x96\xe7\xa8\x8b\xef\xbc\x8c\xe8\xb0\x81\xe4\xb8\x8d\xe4\xb8\x8a\xe5\xb0\x8f\xe7\x8c\xbf\xe5\x9c\x88'
以2進制模式打開文件的方式有:
- wb 二進制創建
- rb 二進制讀
- ab 二進制追加