汉字的内码和区位码与显示汉字原理

汉字的内码和区位码
        在计算机中英文字符是用一个字节的ASCII码表示,该字节最高位一般置0或用做奇偶校验,故实际是用7位码来代表128个字符的,但对于众多的汉字,只有用两个字节才能代表,这样用两个字节代表一个汉字的代码体制,国家制定了统一标准,称为国标码。
        国标码规定,组成两字节代码的最高位为0,即每个字节仅只使用7位,这样在机器内使用时,由于英文的ASCII码也在使用,可能将国标码看成两个ASCII码,因而规定用国标码在机内表示汉字时,将每个字节的最高位置1,以表示该码表示的是汉字,这些国标码两字节最高位加1后的代码称为机器内的汉字代码,简称 内码。 
国家标准的 汉字字符集(GB2312-80)在汉字操作系统中是以汉字库的形式提供的。汉字库结构作了统一规定,即将 字库分成94个区,每个区有94个汉字(以位做区别),每一个汉字在汉字库中有确定的区和位编号(用两个字节),就是所谓的 区位码,区位码的第一个字节表示区号,第二个字节表示位号,只要知道了区位码,就可知道该汉字在字库中的地址。
     
        当我们用某种输入设备例如键盘将汉字输入计算机时,管理模块将自动的把键盘输入的汉字转换为内码。当要显示该汉字时,再由内码转换成区位码,在汉字库找到该汉字,进行显示。如“哈”的区位码为2594,它表示该字字模在字符集的第25个区的第94个位置。

         每个汉字在字库中是以点阵形式存储的,常采用 12×12、16×16、24×24、48×48点阵形式,同英文字模一样,每个点用一个二进制bit位表示,bit=1的点,当显示时,就可以在屏上显示一个点,bit=0的点,则在屏上不显示,这样把存某字的点阵信息直接用来在显示器上按上述原则显示,将出现对应的汉字。 最常用的汉字是16×16点阵,它是由行、列各16个点,共256个点组成的点阵图案,每行的16个点在内存中占二个字节,一个16×16点阵汉字共16行,在内存中占32个字节。
        根据这些字节在字膜中存放的顺序,第一行的第一个字节我们称“0”号字节,第二个字节我们称“1”号字节;第二行的第一个字节我们称“2”号字节,第二个字节我们称“3”号字节。以此类推,最后一行的第一个字节我们称“30”号字节,第二个字节我们称“31”号字节,每个字节高位在前,低位在后,即D7在一个字节的最左侧,D0在最右侧。具体如图3-3所示: 
汉字的内码和区位码与显示汉字原理_第1张图片

        如我们要在屏幕的X行Y列位置显示上面的“哈”字,则可以从点(X,Y)开始将0号字节和1号字节的内容输出到屏幕上;然后行加1,列再回到,输出2号字节和3号字节,依此类推16个循环即可完成一个汉字的显示. 输出一个字节数据时,该字节中“位”(bit)为1时在该“位”位置打点,为0时该“位”位置打空白。
       此外常用的汉字还有24×24点阵,它是由行列各24个点组成的点阵图案,它每列的24个点在内存中占三个字节,一个24×24点阵汉字共24列,在内存中占72个字节;48×48点阵,行×列为48×48,一个汉字占内存288个字节。12×12点阵(为方便编程把列12点扩展为16点,既二个字节)行×列为12×16,一个汉字占内存24个字节。

GB2312-80中, 94个区中除6763个汉字外,第3~7区给这些符号留下了位置,如第3区为英文大小写符号、第4区为日文平假名、第5区为日文片假名、第6区为大小写希腊字母、第7区为大小写俄罗斯字母。这些字符每一个都有固定的区位码,当然也都有一个固定的内码。当用某种输入法输入一个西文字符时,在计算机中是用内码表示的,显示时通过内码计算出区位码,找到该字符字模进行显示。其中英文字符比较特殊,在西文操作系统中,如上所述,它是以ASCII码存储的,而在汉字操作系统中,它是做为一个汉字,以内码方式存储。

你可能感兴趣的:(汉字的内码和区位码与显示汉字原理)