编码进阶
ASCII码:没有中文
A :00000010 8位 一个字节
unicode:
A :00000000 00000000 00000000 00000010 32位 4个字节,中英文都是一样
中 :00000000 00000000 00000000 00010010 32位 4个字节
UTF-8:
A : 00000010 8位 一个字节
中 :00000000 00000000 00000010 24位,3个字节
GBK:
A :00000010 8位,一个字节
中:00000010 00000010 16位,2个字节
1、各个编码之间的二进制是不能互相识别的,会产生乱码
2、文件的传输和储存,不能是unicode,只能是utf-8 、utf-16,gbk,gb2312,ascii码等,因为unicode是32位,占用的空间太多
3、unicode作为gbk和utf-8的转换,还是很重要的
python3中
str在内存中是用unicode编码,传输和储存不能直接使用unicode编码方式,所以必须转换utf-8或者gbk的方式存储或传输,否则会报错
bytes类型,也是一种数据类型,是一种特殊的,字符串的很多方法bytes类型也是同样可以使用的,他的编码是以gbk,utf-8,gb2312编码的
和str的区别就在于编码方式不同,所以传输和存储字符串,先转换成bytes类型,再进行存储或传输
str类型与bytes类型
对于英文:
str: 表现形式:s = 'seven',编码方式:unicode
bytes:表现形式:s = b'seven',编码方式:可能是utf-8,gbk等等
s1 = 'seven' s2 = b'seven' print(s1,type(s1)) print(s2,type(s2))
对于中文:
str: 表现形式:s = '中国',编码方式:unicode
bytes:表现形式:s =b'x\e91\e91\e01\e21\e31\e32',16进制,它的表现形式是看不懂的,需要进行计算,转换成二进制,编码方式:可能是utf-8,gbk等等
如何将str转换成bytes类型:encode(编码方式):编码,可以设置编码方式
s1 = '中国' s2 = s1.encode('utf-8') print(s1,type(s1)) print(s2,type(s2))

浙公网安备 33010602011771号