Windows | 简体中文编码——输入码(外码)、区位码、国标码(交换码)、机内码(内码)、输出码(字形码)区别及联系

  • 内容
  • 相关

西文字符在计算机内使用占有1个字节的ASCII码表示。同样每个汉字都需要进行编码,计算机才能处理它们。计算机处理汉字的过程实际上是汉字输入码、汉字信息交换码、汉字机内码、汉字输出码等编码间的转换过程。下面对这些编码做一些介绍,仅仅起抛砖引玉的作用。

一、输入码(外码)

1输入码也叫外码、输入法编码,是用来将汉字输入到计算机中的一组键盘符号,是作为汉字输入用的编码。

英文字母只有26个,可以把所有的字符都放到键盘上,而使用这种办法把所有的汉字都放到键盘上,是不可能的。所以汉字系统需要有自己的输入码体系,使汉字与键盘能建立对应关系。

2目前常用的外码分为以下几类:

1)数字编码,比如区位码;

2)拼音编码,比如全拼、双拼、自然码等;

3)字形编码,比如五笔、表形码、郑码等。

二、区位码

整个GB2312字符集分成94个区,每区有94个位,每个区位上只有一个字符,即每区含有94个汉字或符号,用所在的区和位来对字符进行编码(实际上就是字符编号、码点编号),因此称为区位码。

换言之,GB2312将包括汉字在内的所有字符编入一个94 * 94的二维表,行就是、列就是,每个字符由区、位唯一定位,其对应的区、位编号合并就是区位码。比如5448位,所以字的区位码是:5448

注意GB类汉字编码为双字节编码,因此,45相当于高位字节,82相当于低位字节

三、国标码(交换码)

虽然GB2312为中文编码,我们也要使用到英文字母等字符,况且当时ASCII已经通用,所以要使GB2312能够兼容ASCII才行。为了兼容,GB2312在设计时避开了ASCII字符中的不可显示字符0000 0000 ~ 0001 1111(十六进制为0 ~ 1F,十进制为0 ~ 31)及空格字符0010 0000(十六进制为20,十进制为32)(为什么只避开ASCII0~32的不可显示字符和空格字符,不避开其他字符呢?后面解释),国标码(又称为交换码)规定表示汉字的范围为(0010 00010010 0001) ~(0111 11100111 1110),十六进制为(2121) ~ (7E7E),十进制为(3333) ~ (126126)

因此,必须将“区码”和“位码”分别加上20H注意,一定是分别加上,因为区码和位码分别代表一个字节,H为十六进制数的后缀:Hexadecimal20H代表十进制中的32),作为国标码。也就是说,国标码相当于将区位码向后偏移了32,以避免与ASCII字符中0~32的不可显示字符和空格字符相冲突。例如“中”字的区位码为5448,转为国标码的过程为,区码:(54+32)=86,位码:(48+32)=80,所以“中”字的国标码表示为:(86, 80)。十六进制为(56H, 50H)

四、机内码(内码)

国标码还不能直接在计算机上使用,因为这样还是会和ASCII中的除控制字符外的其他字符冲突(冲突的结果就是导致乱码)

拿“中”字举个例子,它的国标码中的高位字节为86,这会与ASCII中大写字母'V'冲突,低位字节为80,与'P'冲突。因此为避免这种情况,规定国标码中的每个字节的最高位都从0换成1,即相当于每个字节都再加上128(十六进制为80,即80H;二进制为1000 0000),从而得到国标码的“机内码”表示,简称“内码”。由于ASCII码只用了一个字节中的低7位,利用这个特性,这个首位(最高位)上的“1”就可以作为识别汉字编码的标志,计算机在处理到首位是“1”的编码时就把它理解为汉字,在处理到首位是“0”的编码时就把它理解为ASCII字符。

“中”字从国标码转换为机内码的过程为,高位字节:(86+128)=214,低位字节:(80+128)=208,所以“中”字的内码十进制表示为:(214,208),十六进制表示为:(D6, D0)

此时已经不再与ASCII冲突,完全兼容ASCII。因此,内码才是字符用GB2312编码后的在计算机中存储的形式。

五、输出码(字形码)

1、输出码,又称为字型码、字模码、字形码,属于点阵代码的一种。

为了将汉字在显示器或打印机上输出,把汉字按图形符号设计成点阵图,就得到了相应的点阵代码(字形码)。也就是用01表示汉字的字形,将汉字放入n*n列的正方形(点阵)内,该正方形共有n^2个小方格,每个小方格用一位二进制表示,凡是笔划经过的方格值为1,未经过的值为0

2、显示一个汉字一般采用16×16点阵或24×24点阵或48×48点阵。已知汉字点阵的大小,可以计算出存储一个汉字所需占用的字节空间。

比如,用16×16点阵表示一个汉字,就是将每个汉字用16行,每行16个点表示,一个点需要1位二进制代码,16个点需用16位二进制代码(2个字节),共16行,所以需要16行×2字节/=32字节,即16×16点阵表示一个汉字,字形码需用32字节。

因此,字节数=点阵行数×(点阵列数/8)

3、为了将汉字的字形显示输出或打印输出,汉字信息处理系统还需要配有汉字字形库,也称字模库,简称字库,它集中了汉字的字形信息。

字库按输出方式可分为显示字库和打印字库。用于显示输出的字库叫显示字库,工作时需调入内存。用于打印输出的字库叫打印字库,工作时无需调入内存。

字库按存储方式也可分为软字库和硬字库。软字库以文件的形式存放在硬盘上,现多用这种方式。硬字库则将字库固化在一个单独的存储芯片中,再和其它必要的器件组成接口卡,插接在计算机上,通常称为汉卡,这种方式现已淘汰。

六、小结

可以这样理解,为了在计算机内表示汉字而采取统一的编码方式所形成的汉字编码叫内码。为方便汉字输入而形成的汉字编码为外码,也叫输入码。为显示输出和打印输出汉字而形成的汉字编码为字形码,也称为字模码、输出码。

计算机通过键盘输入的外码(重码时还需附加选择编号)对应于汉字内码,将汉字外码转换(即映射)为汉字内码,以实现输入汉字的目的;通过汉字内码在字模库(即字库)中找出汉字的字形码,将汉字内码转换(即映射)为汉字字形码,以实现显示输出和打印输出汉字的目的。

事实上,英文字符的输入、处理和显示过程大致上也差不多,只不过英文字符不需要输入码(即外码),直接在键盘上输入对应的英文字母即可。

七、实际操作验证

1首先下载软件“GBCCovert.exe”,打开软件输入“国”字,然后按“转换”,就会得到区位码十进制数2590(切记选择十进制的数),我们就通过计算,看看是否真实所得的机内码十六进制数B9FA,并在word文档中加以验证,如下图所示。

2、区位码+2020H=国标码

由上得到区位码的十进制数为2590,GB类汉字编码为双字节编码,因此,,25相当于高位字节,90相当于低位字节。分别转换为十六进制为:

2519H905AH

19 5A+20 20=397AH

3、国标码+8080H=机内码

39 7A+80 80=B9FAH

所得结果,与汉字内码查看器里面的结果一致,不过先别高兴,到word文档里面再验证以下。

4、打开word,选择“插入→符号→其他符号”,在字符代码中输入“B9FA,具体如下图所示。

综上,从区位码计算机内码的实际操作验证完成。快快试试吧!!!

管理员设置回复可下载

 您阅读这篇文章共花了:

上一篇:Emlog | 文章标签显示问题修复

下一篇:华为网络基础 | TCP保证可靠机制——流量控制、拥塞控制

本文标签:    

版权声明:本文依据CC-BY-NC-SA 3.0协议发布,若无特殊注明,本文皆为《fishyoung》原创,转载请保留文章出处。

本文链接:Windows | 简体中文编码——输入码(外码)、区位码、国标码(交换码)、机内码(内码)、输出码(字形码)区别及联系 - http://www.fishyoung.com/post-155.html