编码进阶

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))

 

  

 

posted @ 2021-03-30 22:12  吃啥呦?  阅读(63)  评论(0)    收藏  举报