编码
ascii 码: 1 个字节, 8位表示所有的英文, 特殊符号, 数字等
Unicode 万国码:
1 个字节, 8位表示所有的英文, 特殊符号, 数字等
2 个字节2*8=16位. 每一位有1 和 0两种可能. 有 2**16=65536 种可能.(放不下9万多个汉字)
2 个字节, 16位表示一个中文
utf - 8:
一个中文 用3个字节
GBK: 国标码, 1个中文用2个字节
编码转换:
在python3中:
str: 表现形式: s="alex" 实际编码方式:unicode
bytes:表现形式: s = b"alex" 实际编码方式: utf-8, gbk, gb2312...
Unicode: 所有字符(中英文) 1个字符 = 4个字节
gbk: 1个字符, 英文是1个字节, 中文是2个字节
utf-8: 英文1个字节. 欧洲:2个字节. 亚洲:3个字节
不同的编码之间是不能相互识别,会产生乱码
存储 和 传输的是: utf-8,或者 gbk, 或者gb2312 (绝对不是unicode)
英文的表现形式: s = "Q" # unicode ----> utf-8 b = s.encode("utf-8") print(b) #b'Q' s = "Q" # unicode ----> gbk b = s.encode("gbk") print(b) #b'Q'
中文的表现形式 s = "王小二" # unicode ----> utf-8
b = s.encode("utf-8")
print(b) #b'\xe7\x8e\x8b\xe5\xb0\x8f\xe4\xba\x8c' UTF-8中 一个汉字占3个字节 s = "王小二" # unicode ----> gbk b = s.encode("gbk") print(b) #b'\xcd\xf5\xd0\xa1\xb6\xfe' gbk中一个汉字占2个字节
在python3的内存中,在程序运行阶段使用的是unicode编码,因为unicode是万国码,什么内容都可以进行显示,那么在数据传输和存储的时候由于unicode比较浪费空间和资源,需要把unicode转存成UTF-8或者GBK进行存储,怎么转换呢,在python中可以把文字信息进行编码,编码之后的内容就可以进行传输了,编码之后的数据是bytes类型的数据,其实啊,还是原来的数据只是经过编码之后表现形式发送了改变而已。
bytes 的表现形式:
1,英文 b'alex'英文的表现形式和字符串没什么两样
2,中文b'\xe4\xb8\xad'这是一个汉字的UTF_8的bytes表现形式
字符串在传输时完成bytes=>encode(字符集)来完成
s = "alex" print(s.encode("utf-8")) # 将字符串编码成UTF-8 print(s.encode("GBK")) # 将字符串编码成GBK 结果: b'alex' b'alex' s = "中" print(s.encode("UTF-8")) # 中⽂编码成UTF-8 print(s.encode("GBK")) # 中⽂编码成GBK 结果: b'\xe4\xb8\xad' b'\xd6\xd0'