我这样跟你说个流程,可能不是非常确切,但可以帮助你理解: 机外码→区位码→国标码→机内码。
1、机外码就是你外界输入的字符,这个字符输入后会有一个相对应的区位码(就是一个94*94的棋盘格格,你输入的汉子会对应里面的一个格子,行+列就是我们这里的区+位),
2、区位码经过换算可以变成国标码(所以区位码→国标码这一步只是表示转换下而已),
3、国标码再经过换算可以变成机内码(一般是16进制数表示)。
******************************************************************
下面我再解释下为什么要这样换算来换算去。
汉子国标码是我们国家搞的,是针对汉子编码的一个标准。但是在它之前已经有了ASCII码,ASCII码是西文字符。所以两种标准一起存在于电脑里面就会有冲突的可能,比如同一个数值一个不小心既可以是国标码也可以是ASCII码,那样就乱套了。所以我们这边要对国标码进行一定的换算,使它避开ASCII码的数值范围,换算以后的国标码就成了机内码,这样它就可以很妥当的跟ASCII码共存了。
早期的汉字编码,与计算机无关。
比如:电报码、区位码、四角号码。
电报码,用四位十进制数,代表一个汉字。
密电码,就不必说了。
------------------------
区位码,来源于中文打字机。
中文打字机采用的是“活字印刷术”。
要把一个个“活字”排列的字盘中。
需要打那个汉字,就从字盘中,捡起那个“活字”打在纸上。
字盘中的“活字”,有 94 行(称为 01~94 区)、94 列(01~94 位)。
每一个汉字,都有一个明确的区号、位号。
组合起来,这就是【区位码】。
汉字“中”,位于第 54 行 48 列,其区位码就是 5448。
区位码中的区号、位号,都是十进制数。
------------------------
计算机专家,以区位码为基础,制定了【国标码】。
这些专家很懒,就是把区号位号,都加上 32,就成了【国标码】。
(01~94) + 32 = 33~126。
这个式子,是用二进制相加的,和,在一个字节之内。
所以,国标码,是用两个字节,表示一个汉字。
加 32,如果用十六进制表示,就是加上 20H。
简言之:用十六进制的区号位号,加上 20H,就是【国标码】。
汉字“中”的区位码是 5448。十六进制是 3630H。
加上 2020H,就得到了“中”的国标码:5650H。
------------------------
国标码制定出来之后,才发现,闭门造车了!
国标码和 ASCII 码,混淆了,无法共用。
微软出头解决了这个问题。
把国标码的两个字节的最高位都加上 1,就成了可以实用的【机内码】。
在两个字节最高位加一,就是加上 8080H。
汉字“中”的区位码是 5448。
“中”的国标码是 5650H。
“中”的机内码是 D6D0H。
------------------------
总结:
区位码,这是最基本的编码。
国标码 = 区位码 + 2020H ; 这是标准,但是不好用。
机内码 = 国标码 + 8080H ; 这是实用的编码。
= 区位码 + A0A0H 。
输入码、区位码、国标码与机内码
输入码、区位码、国标码与机内码,这些字对每一位computer
fan
来说,可能都不陌生,但其中的联系与区别,可能就不那么清楚了,(笔者作为一名中专电脑教师,经常遇到同学问类似的问题),下面就这问题讲述一下,以飨读者。
我们知道,键盘是当前微机的主要输入设备,;输入码就是使用英文键盘输入汉字时的编码。目前,我国已推出的输入码有数百种,但用户使用较多的约为十几种,按输入码编码的主要依据,大体可分为顺序码、音码、形码、音形码四类,如“保”?字,用全拼,输入码为码为“BAO”,用区位码,输入码为“1703”,用五笔字型则为“WKS”。
计算机只识别由0、1组成的代码,ASCII码是英文信息处理的标准编码,汉字信息处理也必须有一个统一的标准编码。我国国家标准局于1981年5月颁布了《信息交换用汉字编码字符集——基本集》,代号为GB2312-80,共对6763个汉字和682个图形字符进行了编码,其编码原则为:汉字用两个字节表示,每个字节用七位码(高位为0),;国家标准将汉字和图形符号排列在一个94行94列的二维代码表中,;每两个字节分别用两位十进制编码,前字节的编码称为区码,后字节的编码称为位码,此即区位码,;如“保”字在二维代码表中处于17区第3位,区位码即为“1703
”。
国标码并不等于区位码,它是由区位码稍作转换得到,其转换方法为:先将十进制区码和位码转换为十六进制的区码和位码,;这样就得了一个与国标码有一个相对位置差的代码,;再将这个代码的第一个字节和第二个字节分别加上20H,就得到国标码。如:“保”?字的国标码为3123H,它是经过下面的转换得到的:1703D->1103H->+20H->3123H。
国标码是汉字信息交换的标准编码,但因其前后字节的最高位为0,与ASCII码发生冲突,如“保”?字,国标码为31H和23H,而西文字符“1”和“#”的SCII也为31H和23H,现假如内存中有两个字节为31H和23H,;这到底是一个汉字?,还是两个西文字符“1”;和“#”?于是就出现了二义性,显然,国标码是不可能在计算机内部直接采用的,于是,;汉字的机内码采用变形国标码,其变换方法为:将国标码的每个字节都加上128,即将两个字节的最高位由0改1,其余7位不变,如:由上面我们知道,“保”字的国标码为3123H,前字节为00110001B,后字节为00100011B,高位改1为10110001B和10100011B
即为B1A3H,因此,?字的机内码就是B1A3H;。
显然,汉字机内码的每个字节都大于128,这就解决了与西文字符的ASCII码冲突的问题。
如上所述,汉字输入码、区位码、;国标码与机内码都是汉字的编码形式,它们之间有着千丝万缕的联系,但其间的区别也是不容忽视的。
机内码(16进制)-8080(16进制)=国标码。