一、基本概念
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后再进行编码