编码

一、

数字、字符串  有小数据池  

小数据池:如果创建范围之类的数字或字符串,它会共用一个地址,节省内存

数字的范围 -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'xe91e91e01e21e31e32'

         编码方式: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'xe4xb8xadxe5x9bxbd'
s4 = s3.encode('gbk')  # b'xd6xd0xb9xfa'
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

原文地址:https://www.cnblogs.com/huangjm263/p/8081552.html