一、字符编码
在计算机系统中,所有的数据都以二进制存储,所有的运算也以二进制表示,计算机自己能理解的”语言“是二进制,最小的信息标识是二级制位,8个二进制位表示一个字节,而我们人能所能理解的语言文字则是一套由英文字母、汉字、标点符号字符、阿拉伯数字等等很多的字符组成的字符集。如果要让计算机根据人类的想法意愿来执行,则需要把人类所使用的这些字符集转换成计算机能识别理解的二进制语言,这个过程就叫做编码,而把二进制语言转换成人类能理解的语言的过程就叫做解码。
最早计算机在美国发明使用,需要编码的字符集不大,因此采用了一种单字节编码系统,在这套编码规则中,人们把所需的字符集中的字符一一映射到128个二进制数上,这128个二进制数是最高位位0,利用剩余7位组成0000000001111111(0x000x7F)。这套编码系统也被称为ASCII编码,通过这个编码过程,计算机就将人类的语言转化为自己的语言存储起来,反之从磁盘中读取二进制数并转化为字母数字以供显示的工程就是解码。
随着计算机的发展以及推广,使用计算机的国家越来越多,自然需要编码的字符集就越来越大,最开始的ASCII字符集由于收到单字节的限制,其容量就远远不够了,尤其是我国成千上万的汉字(其他国家的就不说了),所以我国推出了《信息交换用汉字编码字符集》GB2313-1980,再后来加入了生僻字、繁体字等衍生除了GBK字符集及相关规范,后面还有GB18030,但是各个国家搞各个国家的编码字符集显然不能实现跨语言、跨平台的文本转换和处理需求,所以ISO国际标准化组织提出了Unicode的新标准,这套标准中包含Unicode字符集和一套编码规范,Unicode字符集涵盖世界上多有文字和符号字符,Unicode编码方案为字符集中的每一个字符指定了统一且唯一的二进制编码,每一个码位就唯一对应一个字符。
1.ASCII
ASCII编码每个字母或符号占1byte(8bits),并且8bits的最高位是0,因此ASCII能编码的字母和符号只有128个。有一些编码把8bits最高位为1的后128个值也编码上,使得1byte可以表示256个值,但是这属于扩展的ASCII,并非标准ASCII。通常所说的标准ASCII只有前128个值!
ASCII编码几乎被世界上所有编码所兼容(UTF16和UTF32是个例外),因此如果一个文本文档里面的内容全都由ASCII里面的字母或符号构成,那么不管你如何展示该文档的内容,都不可能出现乱码的情况。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R7fuJnSq-1680698319685)(G:\教程\自己总结笔记(上传)csdn\ASCII码表.png)]
2.GB2312、GBK、GB18030编码
GB全称GuoBiao国标,GBK全称GuoBiaoKuozhan国标扩展。GB18030编码兼容GBK,GBK兼容GB2312,其实这三种编码有着非常深厚的渊源,我们放在一起进行比较。
【GB2312】
最早一版的中文编码,每个字占据2bytes。由于要和ASCII兼容,那这2bytes最高位不可以为0了(否则和ASCII会有冲突)。在GB2312中收录了6763个汉字以及682个特殊符号,已经囊括了生活中最常用的所有汉字。(GB2312编码全表:链接)
GB231