socket建立之数据格式转化unicode-encode

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

版权声明:本文为weixin_68123569原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。