一、发展
ASCII编码--->>GBK\Shift_JIS......(万国码)----->unicode(统一)------>utf-8(解决unicode浪费)
可以这么理解:unicode、gbk、gb2312是编码字符集.utf-8是 unicode的一种实现方式
二、python3中str和bytes
在python3中,有3中字符串类型,str用于unicode文本(ASCII或其他),bytes用于二进制数据(包括编码的文本),bytearray是bytes的一种可变的变体。
python3中将str直接存成unicode
bytes是Python 3中特有的,Python 2 里不区分bytes和str。
bytes 类型的数据非常适合在互联网上传输,可以用于网络通信编程;
bytes 也可以用来存储图片、音频、视频等二进制格式的文件。
有三种方法可以得到bytes类型的字符串:
1.如果字符串的内容都是 ASCII 字符,那么直接在字符串前面添加b前缀就可以转换成 bytes。
2.bytes 是一个类,调用它的构造方法,也就是 bytes(),可以将字符串按照指定的字符集转换成 bytes;如果不指定字符集,那么默认采用 UTF-8。
3.字符串本身有一个 encode() 方法,该方法专门用来将字符串按照指定的字符集转换成对应的字节串;如果不指定字符集,那么默认采用 UTF-8。
三、encode和decode
# decode() 方法以指定的编码格式解码 bytes 对象。默认编码为 'utf-8'。该方法返回解码后的字符串。 # encode() 方法以指定的编码格式编码字符串。该方法返回编码后的字符串,它是一个 bytes 对象。 s = '我' print(s.encode('gbk')) #str可以通过encode编码字符串,b'\xce\xd2' print(s.encode('utf-8')) #str可以通过encode编码字符串,b'\xe6\x88\x91' print(b'\xce\xd2'.decode('gbk')) #bytes对象通过decode解码 print(b'\xe6\x88\x91'.decode('utf-8')) #bytes对象通过decode解码