一、为什么需要解码与编码

  1、因为不同的编码储存不同类型的字符,比如:

    1)ASCII码只能储存英文和特殊字符。

    2)gbk储存中国字符。

    3)unicode存储所有字符,所有的ASCII码占2个字节;

    4)utf8是灵活的unicode,英文特殊字符是占一个字节,中文字符占3个字节;

    5)utf8mb4是utf8的升级,中文占4个字节,解决了utf8不能存4字节的问题(比如emoji);

    6)。。。

  2、被编码成对应字符储存数据后,如果想要查看对应数据,需要将其解码为string(什么类型的编码,需要使用对应的类型来解码)

  特殊说明:windows默认编码是gbk

 

二、python2和python3中的区别

  1、在python2中string和bytes是不区分的

  2、而在python3中两者是区分的,所以需要通过解码与编码来转换两者数据类型。

  3、python3 默认是unicode,支持所有格式,只是英文占用内存较大,若要转换为内存占用较小的格式(比如utf8),可以直接编码string.encode('utf-8')

 

三、编码解码方式

  1、编码:string通过encode(‘编码类型’)转换为对应的bytes:

    string.encode('utf-8')编码,utf-8在python3中是默认的,python2中是根据系统编码。

  2、解码:bytes通过decode(‘编码类型’)转换为string;

    bytes_unicode_str.decode(encoding='utf-8'),为了保险,最好把'utf-8'写上。

  3、gbk类型字符串转utf-8类型字符串:

    先将字符串decode为unicode,再将Unicode encode为utf-8:

      string.decode('gbk).encode('utf-8')

  4、字符串的其他编码表示方式:

    1)utf-8可以打印Unicode,但gbk不能打印unicode,需要转换。

    2)u'string',表示是unicode类型字符串,一般用在中文字符串前面,避免因不同编码格式导致的乱码。直接decode解码会出错,因为已经是string了,就不需要解码了

    3)b'string',是bytes类型字符串,可以直接decode转换为string,但是要看b是根据什么编码方式编码的字符串,需要通过对应的解码方式解码。

  

  5、若字符串中存在部分其他编码字符,需要通过反编码方式:

    b = 'COVID-19 \\u2014 Including'

    b.encode('utf-8').decode('unicode_escape')

    或者 b'COVID-19 \\u2014 Including'.decode('unicode_escape')

  注:字符串必须编码后(或者是bytes类型),才能被解码

 

posted on 2020-04-19 18:06  jaysonteng  阅读(765)  评论(0编辑  收藏  举报