这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战
一.传统编码
1.根据第一个字节来选择代码页中不同的码表进行解析
①.代码页:内码表,从字符映射到单字节值或多字节值的表格中的表现
②.码表:就是二进制对应的具体的值(个人理解)
2.中文字符集
①.GB2312:目前最常用的 ,涵盖了所有简体字符及一部分其他字符
②.GBK:(K 代表扩展的意思)在①基础上,加入了繁体字符及其他
③.GBK最高位为1,第一个字节位于0x81(1000 0001) – 0xFE(1111 1110)之间
④.这两个字符集的字符都是使用 1-2 个字节来表示。
⑤.GBK中的英文也是用ascii表示
3.ASCII 字符共128个,编码规定使用单字节,低位的 7 个比特去编码所有的字符
4.美国 ANSI 组织制定了 ANSI 标准字符编码,通常指的是平台的默认编码,例如英文操作系统是 ISO-8859-1(单字节编码,256个),中文系统是 GBK
5.造成乱码的原因就是因为编码规范不一样,使用了错误的字符编码去解码字节流
二.Unicode字符集
1.理论
①.一个全人类达成共识的巨大的字符集,在一份文档中显示所有字符
②.为每个字符进行统一编号,分配唯一的字符码(Code Point)
③.将字符集和字符编码方案分离,决定最终字节流的是具体的字符编码
④.Unicode编码,是对 UTF-8 等具体编码方案的统称,并不是具体的编码方案。
2.UTF-8 采用 1-4 个字节来编码字符
①.一个字节,最高位为 0,表示这是一ASCII 字符(00 - 7F)。所有 ASCII 编码是UTF-8
②.一个字节,以 11 开头,连续的 1 的个数表示此字符的字节数,例如:110xxxxx 代表它是双字节 UTF-8 字符的首字节。
③.一个字节,以 10 开始,表示它不是首字节,需要向前查找才能得到字符首字节
④.英文字母被编码成1个字节,汉字通常是3个字节