一段内容可以有多种编码方式,如unicode,utf-8,gbk,由于unicode编码一个字符四个字节。传输时费的流量太多,一般不用这个编码方式传。虽然编码方式不一样,但实际上表示的内容是一样的,好比二进制,十进制,十六进制,数字可以有这么多中表达方式。字符也是同样的道理。而一般网络传输的物理层只认识二进制,电线只能传0,1嘛,和灯泡的开关一样0就是关,1就是开,物理层有各种协议可以把bytes类型的数据转化成二进制。而且这些协议只认识byte类型。如果不是bytes类型是传不过去的。
在python2中默认是unicode编码方式,
python3中默认是utf-8对的编码方式。但是字符串还保留着unicode编码方式
with open(encoding)# 此处的encoding是文件是以什么编码方式写的,就以哪个编码方式打开
socket模块中的 sk.recv(9) # 9表示字节,byte类型的字节。
struct模块中的 pack方法,返回的是byte类型。
encode()放回给定编码的bytes类型,源码中大致意思是把python格式转化为C语言格式。因为C语言是最底层的语言之一。decode解码成原本类型
a = 'kdkd'
f = bytes(a, encoding='utf-8') # 转化为utf-8的bytes类型,相当于b’kdkd‘和a.encode('utf-8')
print(f) # b'kdkd'
print(len(f)) # 4 # 一个字符一个字节
b = '看到方法'
d = bytes(b, encoding='utf-8')
print(b.encode()) # b'\xe7\x9c\x8b\xe5\x88\xb0\xe6\x96\xb9\xe6\xb3\x95'
print(d) # b'\xe7\x9c\x8b\xe5\x88\xb0\xe6\x96\xb9\xe6\xb3\x95'
print(len(d)) # 12 # 一个中文字符3个字节