首先要明白一些概念,调用函数的时候就不会出错了
编码:把数据变为01比特。网络通信中的编码也是这个意思。
解码:从01比特恢复为有意义的表示形式
在python3中,字符串是str类型,而bytes类型表示的是一个字节串。从str到bytes就叫编码,从bytes到str就叫解码。
UNICODE是一个独立的字符集,它并不是和编码绑定的,UTF-8/UTF-16/UTF-32才是UNICODE具体的编码方案。UNICODE编码的问题网上资料非常多,不再赘述,只说两点:
1、UTF-8为一种变长的编码方案,使用 1~6 个字节来存储。对英文字母的编码只有1个字节,和ASCII编码一样。
2、UTF-xx都存在BOM头,需要注意
python3中str类型默认采用unicode编码
>>> s = 'abcd'
>>> s.encode('utf-8')
b'abcd'
>>> s.encode('utf-16')
b'\xff\xfea\x00b\x00c\x00d\x00' #输出带BOM头
>>> s.encode('utf-16le')
b'a\x00b\x00c\x00d\x00' #输出不带BOM头,小端编码
>>> s.encode('utf-32le')
b'a\x00\x00\x00b\x00\x00\x00c\x00\x00\x00d\x00\x00\x00' #输出不带BOM头,小端编码
>>> bytes(s, 'utf-16le') #bytes
b'a\x00b\x00c\x00d\x00'