区位码、国标码与机内码

                     区位码、国标码与机内码

      

为了适应计算机处理汉字信息的需要,在1980年,我国国家标准总局发布《信息交换用汉字编码字符集—基本集》。198151开始实施的这套国家标准。这套国家标准的标准号是GB2312-1980

这套国家标所制定的编码就是我们常说的区位码。

 

该标准选出6763个常用汉字(其中,一级常用汉字3755个,二级汉字3008个)和682个非汉字字符,并为每个字符规定了标准代码,以便在不同的计算机系统之间进行汉字文本交换。

GB2312字符集构成一个94行、94列的二维表,行号称为区号,列号称为位号。每一个汉字或符号在码表中的位置用它所在的区号和位号来表示,也就是说每一个汉字或符号的区位码的区码和位码的取值均在1~94之间。

 

为了处理与存储的方便,每个汉字的区号和位号在计算机内部分别用一个字节来表示。例如,字的区号为49,位号为07,它的区位码即为4907,用2个字节的二进制数表示为:

00110001 00000111

 

区位码无法用于汉字通信,因为它可能与通信使用的控制码(00H~1FH)(即0~31,也就是ASCII码中的0~31的控制字符)发生冲突。解决着这种冲突的办法:每个汉字的区号和位号必须分别加上32(即二进制数00100000)。经过这样的处理而得的代码惯上仍叫国标。并且在现实中,我们所说的国标码一般是指这种改变后的国标码,而将原始的国标码称为区位码。因此,字的国标码(改变后的)计算为:

00110001   00000111
+00100000 +00100000
-------------------
01010001   00100111

用十六进制数表示即为5127H

 

由于文本中通常混合使用汉字和西文字符,汉字信息如果不予以特别标识,就会与单字节的ASCII码产生冲突。电子工业部第六研究所开发CCDOS的时候,使用了一个简便的解决这种冲突的方案:使表示GB2312汉字的两个字节的最高位都为1,也就是说让国标码(改变获的)的区号和位号各加上128,从而上升到非美标码的位置。这种高位为1的双字节汉字编码即为GB2312汉字的机内码,简称为内码。在Window XP下这种内码正好是Unicode16

因此,字的机内码为:

11010001 10100111

16进制表示即为D1A7H

 

最后要指出的是,汉字的输入编码与汉字的机内码是不同范畴的概念。不管采用什么样的编码输入法(例如拼音、五笔字型等)来输入一个汉字,其机内码都是相同的。

 

区位码、国标码与机内码的转换关系 
 

区位码的十六进制表示+2020H=国标码;

国标码+8080H=机内码

 

以汉字为例,字的区内码为2083 。将的区位号2083转换为十六进制的表示形式,得1453H,则:

的国标码 = 1453H 2020H 3473H

的机内码 = 3473H 8080H B4F3H

 

 

其他参考

 

    国标中华人民共和国国家标准信息交换用汉字编码的简称。国标表(基本表)把七千余汉字、以及标点符号、外文字母等,排成一个94行、94列的方阵。方阵中每一横行叫一个,每个区有九十四个。一个汉字在方阵中的坐标,称为该字的区位码。例如字在方阵中处于第54区第48位,它的区位码就是5448

    其实94这个数字。它是美标中形象码的总数。国标表沿用这个数字,本意大概是要用两个美标形象符代表一个汉字。由于美标形象符的编码是从33126,汉字区、位码如果各加上32,就会与美标形象码的范围重合。如上例字区、位码加上32后,得86,80。这两个数字的十六进制放在一起得5650,称为该字的国标码,而与其相对应的两个美标符号,VP,也就是字的国标符了。

  这样就产生了一个如何区分国标符与美标符的问题。在一个中英文混用的文件里,“VP”到底代表字呢,还是代表某个英文字头缩写?电子工业部第六研究所开发CCDOS的时候,使用了一个简便的解决方案:把国标码的两个数字各加上128,上升到非美标码的位置。(改变后的国标码,习惯上仍叫国标。)

 

       内码是指操作系统内部的字符编码。早期操作系统的内码是与语言相关的.现在的Windows在内部统一使用Unicode,然后用代码页适应各种语言,"内码"的概念就比较模糊了。我们一般将缺省代码页指定的编码说成是内码。内码这个词汇,并没有什么官方的定义。代码页也只是微软的一种习惯叫法。作为程序员,我们只要知道它们是什么东西,没有必要过多地考证这些名词。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值