ASCII码
A : 00000001 一个字节8位来表示一个字符
Unicode
A : 00000000 00000000 00000000 00000001 4个字节32位来表示一个字符
中文一个字例如:
中:00000000 00000000 00000001 3个字节24位来表示一个字符
utf-8
A : 00000001 1个字节8位来表示一个字符
中文一个字,例如:
中:00000000 00000000 00000001 3个字节24位来表示一个字符
gbk
A : 00000001 1个字节8位来表示一个字符
中文一个字,例如:
中: 00000000 00000001 2个字节16位来表示一个字符
总结:(python2和3通用的)
1,各个编码之间的二进制,是不能相互识别的,会产生乱码(犹如:红军的密码本和日本鬼子的密码本是不一样的,不能通用)
2,文件的储存,传输不能是Unicode(只能是utf-8,utf-16,gbk,gb2312,ASCII码等) <原因是Unicode占用的空间太大>
下面是python3所特有的性质:
python3的字符串str 在内存中是用Unicode编码的。(产生的问题,储存和传输不是一种编码,需要转化)
bytes类型:
对于英文:
str :表现形式: s = 'alex'
编码方式:00000001 Unicode
bytes:表现形式:s = b 'alex'
编码方式:00000001 utf-8,gbk,gb2312等
对于中文:
str :表现形式: s = '中国'
编码方式:00000001 Unicode
bytes:表现形式:s = b 'xe91e91e01e21e31e32' 是16进制
编码方式:00000001 utf-8,gbk,gb2312等
总结:
实例展示:
s = 'alex'
s1 = s.encode('utf-8')
# encode 编码 将Unicode转化为utf-8或者gbk ; 表现形式是:str-->bytes
print(s1)
s ='中国'
s1 = s.encode('utf-8')
print(s1)
结果截图如下:转化成了16进制(utf-8是3个字节表示一个汉字)
s ='中国'
s2 = s.encode('gbk')
print(s2)
结果截图如下:转化成了16进制(gbk是2个字节表示一个汉字)