编码

一、

 

数字、字符串  有小数据池  

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

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

posted @ 2017-12-21 17:18  笨笨侠  阅读(168)  评论(0编辑  收藏  举报