1. 程式人生 > 實用技巧 >python基礎——socket通訊編碼解碼

python基礎——socket通訊編碼解碼

一、基本概念
1)編碼:把字串str轉換成用於儲存或傳輸的位元組序列bytes
2)解碼:把位元組序列bytes轉換成人類可讀的文字字串str

二、python3裡面內建了兩種基本資料型別:
1)str 資料型別----以unicode(萬國碼)編碼儲存
2)bytes 資料型別----以十六進位制形式儲存

三、編碼解碼方式:
由於socket通訊的傳送和接收都只接收bytes型別資料,而實際傳過去的可能是str型別,所以系統需要對資料進行編碼和轉碼

1)str>>>bytes:編碼
方法1:字串資料.encode(編碼規則)
eg:
s=“hello”
bt=s.encode("utf-8") #採用utf8編碼規則將str型別資料轉換為byte型別資料

方法2:bytes(字串資料,編碼規則)
eg:
s="hello"
bt=bytes(s,"utf8") #採用utf8編碼規則將str型別資料轉換為byte型別資料


2)bytes>>>str:解碼
方法1:字串資料.decode(編碼規則)
eg:
bt=bytes("welcome 袁","utf8")
s=bt.decode("utf-8") #採用utf8編碼則對應解碼也應該採用utf8.否則會出現解碼錯誤情況

方法2:str(bytes型別資料,編碼規則)
eg:
bt=bytes("welcome 袁","utf8")
s=str(bt,"utf8") #採用utf8編碼則對應解碼也應該採用utf8.否則會出現解碼錯誤情況


完整的編碼解碼:

utf8編碼:
#編碼
s="welcome 元昊"
print(type(s))
b=bytes(s,"utf8") #用utf8編碼規則將str型別資料轉換為byte型別資料

print(b) #b'welcome \xe5\x85\x83\xe6\x98\x8a'
b1=s.encode("utf8")
print(b1) #b'welcome \xe5\x85\x83\xe6\x98\x8a'

#解碼
new_s=b1.decode("utf8") #用什麼規則編碼就要用什麼規則解碼
print(new_s) #welcome 元昊
new_s1=str(b1,"utf8")
print(nw_s1)



GBK編碼:
s1="hello一欄"
new_b=bytes(s1,"gbk")
print("gbk編碼方式下的bytes型別:%s" %new_b) #b'hello\xd2\xbb\xc0\xb8'

s11=new_b.decode("gbk")
print("gbk解碼後str型別:%s" %s11) #hello一欄


四、非str型別資料編碼
eg:int型別編碼
i=123
bytes(str(i),"utf8") #先將int型別強制轉str型別,之後再用bytes方式進行編碼


其他資料型別方法也一樣,無法直接使用bytes進行編碼的都需要先強制轉str後再進行編碼