编码详解
常见的编码:
UTF-8
GBK(ANTI、cp936)
ASCII
GB2312
ISO-8859-1
编码集是什么?
用于图形界面显示对应的编码集,其实就是图形
字节对应的图案是什么
1)ASCII: 最早起实现图形界面时, 计算机中的 字节对应的 字符集(128个字符)
只使用了 0x00 -- 0x7F
(128个字符:2**7=128 )
1个字节
2)ISO-8859-1: 西欧字符集
还有一些ISO-8859-2、ISO-8859-3、ISO-8859-4...ISO-8859-16
计算机发展到欧洲后,发现ASCII码没有包含他们特有的字符,
兼容ASCII码
进行扩展, 0x80 - 0xFF
1个字节
3) GB2312: 中文简体编码集
计算机发展到中国后,创造的字符集
2个字节,兼容 ASCII
所有的2个字节的内容(中文、全角符号等),高位字节和地位字节都必须大于 0x7F
GBK: 中文编码集,包括繁体
2个字节,兼容 GB2312
只需要高位字节大于0x7F,低位字节不限制
GB18030:
1字节、2字节和4字节三种方式对字符编码
兼容GBK
BIG5: 台湾的繁体中文字符集
2个字节
4)unicode: 每种语言中的每个字符设定了统一并且唯一的二进制编码
(定长存储) 通常 2-4个字节 表示一个字符
unicode将所有语言都统一到一套编码集,通常使用2个字节16位,有的是4个字节。
包括ASCII码也需要2个字节表示,浪费空间
17个平面
其中有一个BMP基础平面,是 2个字节 , 一般的中文也是2个字节
其他16个平面都是 4 字节
不兼容ASCII
类似 你好啊 = \u4f60\u597d\u554a
5)UTF-8: UTF-8 、 UTF-16、UTF-32
(变长存储)英文字符使用1个字节,沿用原来的ascii码
中文存储一般使用3个字节
可变字节: 1个字节、2个字节、3个字节、4个字节, 中文是3个字节
兼容ASCII
1、小于 0x80 ,对应ASCII
2、多字节
读一个字节,大于0x7F之后,展开为 2进制
字节的高位有几个连续的1,那么就代表需要取几个字节
110* **** 代表是2个字节表示一个字符
1110 **** 代表是3个字节表示一个字符
1111 0*** 代表是4个字节表示一个字符
后续根着的字节,前面2位必须是 10 ,这 2位无实际意义,只是占位符
import sys
print (sys.getdefaultencoding())
#获得系统的默认编码 使用的是python3.6版本 运行结果为:utf-8
汉字 : 中
对应utf-8的字节: b'\xe4\xb8\xad'
s="中"
print(s.encode("utf-8"))
#运行结果:b'\xe4\xb8\xad'
展开: e4 b8 ad
e 4 b 8 a d
1110 0100 1011 1000 1010 1101
去掉第一个字节的表示位数的 1110 和后续的字节的高2位 10
0100 11 1000 10 1101
每8位进行拼接:
0100 1110 0010 1101
4 e 2 d
对应的 unicode编码就是: \u4e2d
s="中"
print(s.encode('unicode-escape'))
#运行结果:b'\\u4e2d'