ascii
A : 00000010 8位 一个字节
unicode
A : 00000000 00000001 00000010 00000100 32位 四个字节
中:00000000 00000001 00000010 00000110 32位 四个字节
utf-8
A : 00100000 8位 一个字节
中 : 00000001 00000010 00000110 24位 三个字节
gbk
1,各个编码之间的二进制,是不能互相识别的,会产生乱码。A : 00000110 8位 一个字节
中 : 00000010 00000110 16位 两个字节
2,文件的储存,传输,不能是unicode(只能是utf-8 utf-16 gbk,gb2312,asciid等)
py3:
str 在内存中是用unicode编码。
bytes类型
对于英文:
str :表现形式:s = 'alex'
编码方式: 010101010 unicode
bytes :表现形式:s = b'alex'
编码方式: 000101010 utf-8 gbk。。。。
对于中文:
str :表现形式:s = '中国'
编码方式: 010101010 unicode
bytes :表现形式:s = b'x\e91\e91\e01\e21\e31\e32'
编码方式: 000101010 utf-8 gbk。。。。
编码于解码
Python3 中没有 decode 方法,但我们可以使用 bytes 对象的 decode() 方法来解码给定的 bytes 对象,这个 bytes 对象可以由 str.encode() 来编码返回。
encode是将unicode转为制定编码,表现形式上,从str类型转为bytes类型
decode是将其他编码转为unicode,表现形式上,从bytes类型转为str类型
print('ABC'.encode('ascii')) #b'ABC'
print('中文'.encode('utf-8')) #b'\xe4\xb8\xad\xe6\x96\x87'
str = "菜鸟教程";
str_utf8 = str.encode("UTF-8")
str_gbk = str.encode("GBK")
print(str)
print(str_utf8)
print(str_gbk)
print(str_utf8.decode('UTF-8', 'strict'))
print(str_gbk.decode('GBK', 'strict'))