1 字符集、代码点、编码的概念

任何信息存储在计算机中,都将是无差别的0和1的序列。所以,我们要想在计算机中存储字符,那么,我们就需要对字符进行编码,将字符编码为计算机可以识别的0和1的序列。编码就是将信息从一种形式转换为另一种形式。

字符集:
在编码之前,我们首先要确定,我们要对哪些字符进行编码。然后,将这些需要进行编码的字符集合到一起,这样就形成了我们所说的字符集。常见的字符集有:ASCII、GBK、GB2312、Unicode等等。

代码点:
字符集中的每一个字符都会被分配一个编号,这个编号我们称之为代码点。
需要注意如下:在ASCII字符集中,代码点是从0开始依次递增的 。但是,并非所有的字符集,代码点都是从0开始依次递增的。

编码:
为了在计算机中存储字符,我们需要将字符的代码点转换为0和1的序列,而这个转换的过程,我们称之为字符编码。

要想在计算机存储字符,需要经过如下5个步骤:
字符 --> 代码点 --> 编码 --> 0和1的序列(字符的编码) --> 存储到计算机中。


2 ASCII

2.1 ASCII字符集编码的字符

字符集:ASCII、GBK、GB2312、Unicode

2.2 ASCII字符集的代码点

在ASCII字符集中,代码点是从0开始依次递增的。

2.3 ASCII字符集的编码方式

直接将代码点编码为它所对应的8位二进制数即可。

注意: 一个字节并非一定是8位,所以,严格来说应该是:转换为它所对应的1个字节长的二进制数。


3 GB2312

3.1 GB2312字符集编码的字符

包括了汉字信息交换用的基本图形字符。

3.2 GB2312字符集的代码点

GB2312字符集中,代码点是根据区号位号来安排的。

GB2312将字符划分为了94个区(区号从1-94),每个区94个字符。字符在区里面的位置叫做位号(位号从1-94)。
比如:字符 <健>,它属于第29区中的第一个字符那么,字符 <健>的区号就是29,位号就是1。
字符集:ASCII、GBK、GB2312、Unicode
GB2312的代码点计算方式如下:区号+32,位号+32 --> 代码点,那么健的代码点就是61,33。

+32的原因:
GB2312字符集除了兼容ASCII以外,它还对原ASCII中打印字符进行了2字节的编码,就是我们平时所说的全角字符(第3区)。
全角字符在显示和打印的时候,字符的轮廓占一个汉字的位置:

  • AAA  --> 半角
  • AAA --> 全角

为了使全角字符的位号和它所对应的半角字符在ASCII中的代码点保持一致,以方便它们之间的互转。所以,我们对位号+32得到最终的代码点 。区号为什么+32?暂时不知道,哈哈哈哈。

字符集:ASCII、GBK、GB2312、Unicode

3.3 GB2312字符集的编码方式

由于GB2312字符集兼容ASCII,所以,原ASCII的字符仍旧按照它原来的方法进行编码(1个字节)。GB2312采用2个字节对自身的字符进行编码:区号转换为二进制存入高字节中,位号转换为二进制数存入低字节中,两个字节的最高位固定为1

最高位固定为1的原因:
如果一个字节,它的最高位为0,那么,我们就可以判定这个字节存储的是ASCII字符的编码,我们就应该按照ASCII的字符编码方法对它进行解析,得到正确的结果。如果一个字节,它的最高位为1,我们就可以判定这个字节及其后面的一个字节,存储的是GB2312字符的编码,我们就应该将这个字节及其后面的一个字节,按照GB2312的字符编码方法对它进行解析,得到正确的结果。

相关文章: