编码

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'

 

posted on 2018-08-02 15:59  KD_131  阅读(219)  评论(0编辑  收藏  举报