编码
一、
数字、字符串 有小数据池
小数据池:如果创建范围之类的数字或字符串,它会共用一个地址,节省内存
数字的范围 -5~256
字符串:1、不能含有特殊字符
2, s*20还是同一个字符 s是一个字符, 超过21以后就是两个地址
剩下的list,dict,tuple,set都没有小数据池
二、
ascii:
一个字符占8位,一个字节 没有中文
unicode:
32位:一个字符占32位,四个字节(英文和中文都是四个字节)
utf-8:
英文:一个字符占8位,一个字节
中文:一个字符占24位,三个字节
gbk:
英文:一个字符占8位,一个字节
中文:一个字符占16位,两个字节
python3中:
字符串str 在内存中是用unicode编码
bytes类型
对于英文:
str:表现形式: s = ‘alex'
编码方式: unicode
bytes:表现形式: s = b'alex'
编码方式:utf-8,utf-16,gbk,gb2312,ascii等
对于中文:
str:表现形式:s = '中国'
编码方式:unicode
bytes:表现形式: s = b'x\e91\e91\e01\e21\e31\e32'
编码方式:utf-8,gbki等
三、encode编码,如何将str ---> bytes
s1 = 'hjm' s2 = s1.encode('utf-8') #b'hjm' s2 = s1.encode('gbk') #b'hjm' print(s2)
s3 = '中国' s4 = s3.encode('utf-8') # b'\xe4\xb8\xad\xe5\x9b\xbd' s4 = s3.encode('gbk') # b'\xd6\xd0\xb9\xfa' print(s4)
四、decode解码,如何将bytes ---> str
# str --> bytes (encode) s = '二哥' b = s.encode('utf-8') print(b) #bytes --> str (decode) s1 = b.decode('utf-8') print(s1)
如果字符串里面全部是字母,解码的时候可以使用decode('gbk'),因为此时都是根据ascii