一、为什么需要解码与编码
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类型),才能被解码