1981年国家颁布了GB2312汉字标准共有6763个,其中一级3755,二级3008,还有682非汉字字符。并为每个字符规定了标准编码,便于在计算机内部相互转换。
作为GB2312标准只是定义了一张94×94的二维表。其中行为区号,列为位号。这样可以利用区号和位号来找到其中的汉字。这种编码就是我们所说的区位码。
比如
陈(1934) 区号:19 位号:34,为了处理与存储的方便,每个汉字的区号和位号在计算机内部分别用一个字节来表示
区位码无法于汉字进行通信,因为ASCII码中规定了OOH-1F作为控制码使用,这样就发生了冲突。由于计算机不是中国人发明的所以只能听从于国际标准ISO2022规定区号和位号都加上32,这样就防止冲突。经过加上32以后的编码称为国际交换码
陈-区号:19+32= 51
00010011+00100000=00110011
位号:34+32=66
00100010+00100000=01000010
即5166 16进制3342
由于文本中通常混合使用汉字和西文字符,汉字信息如果不予以特别标识,就会与单字节的ASCII码混淆。此问题的解决方法之一是将一个汉字看成是两个扩展ASCII码,使表示GB2312汉字的两个字节的最高位都为1。
这种高位为1的双字节汉字编码即为GB2312汉字的机内码,简称为内码。
00110011最高位变为1则从33变为B3
01000010最高位变为1则从42变为C2
这样一来,陈的机内码应该为B3C2
这里要说明的是不管你是采用什么样的输入法输入汉字,其汉字的机内码都是相同的。
如果要从一个汉字的机内码转换为区位码,其实就是相反的方向进行运算。