盘算机中文编码《区位码\国标码\机内码》进阶史
汗青久长的泱泱中华,文明博识博识,笔墨唯一无二,且能没有一套属于本人的盘算机编码。1980年,为了使每个汉字有一个举国一致的编码,我国公布了汉字编码的国度标准:GB2312-80《信息互换用汉字编码字符集》基本集,这个字符集是我国中文信息处理武艺的提高基本,也是国内一切汉字体系的一致标准。将一些常用标记及汉字,按区与位的办法编入码表,这套编码便是区位码。
一、区位码
区位码是一个四位的十进制数,高两位为区码(01-94),低两位为位码(01-94),由此构成一个94×94的矩阵,每个码值都对应着一个唯一的标记或汉字。如下图示:
图1. 第01区 特别标记
图2. 汉字区位码比力表
分析:‘啊’的区位码为1601,区码为16,位码为01。
图3. 多音字‘腌’
分析:这种编码颠末加工致理一概以汉语拼音的字母为序, 音节相反的字以使用频率为序,其查找办法与寻常汉语字典的汉字拼音音节索引查找法相反。由于它是一种无重码的汉字编码,以是多音字仅有一个编码。比如:重庆的“重”和分量的“重”,字同音不同,汉字“重”的编码是按Zhong 音编码。
由图2,图3所示,按拼音音节索引时,编码并不一连,这是由于汉字被分级处理,一级汉字相对更为常用。如下图示:
图4. 区段分析
分析:在某些硬件目标相对偏低的平台上约莫仍然还在使用着一级码汉字。
二、国标码
汉字区位码界说好后融入盘算机,发觉少了一些控制符,如回车,换行,退格等,同时ASCII编码中前32个控制码恰好包含了这些,那就借来用用吧!为此,国标码诞生了。为了兼容这些控制码,国标码划定在区码、位码的基本上分散加20H(即32的16进制数)。比如:汉字‘啊’的区位码为1601,则区码为16,位码为01,转换成16进制后,区码为10H,位码为01H,转国标码,则区码10H+20H=30H,位码01H+20H=21H,构成后国标码为3021H;
图5. 国标码
分析:图5为Mac体系中的16点阵中文国标码点阵字库,‘啊’的国标码为3021H。
三、机内码
这里特指汉字机内码,简称“内码”,亦称“变形国标码”,指盘算机内里存储,处理加工和传输汉字时所用的由0和1标记构成的代码。
国标码虽说很好地处理了控制字符成绩,但随着社会的提高,汉字处理体系想要兼容英文(事先主流就是ASCII),当体系中同时存在ASCII和汉字国标码时,将会产生二义性。比如:有两个字节的内容为30H和21H,它既可表现汉字“啊”的国标码,又可表现ASCII中的“0”和“!”,为此,汉字机内码诞生了。由于ASCII编码范围为00H~7FH,字节最高位皆为‘0’,机内码应对国标码加以得当变动处理,将相应国标码每个字节的最高处点为“1”,即:汉字机内码=汉字国标码+8080H。比如:“啊”字的国标码是3021H,则其汉字机内码为B0A1H=3021H+8080H。
图6. 机内码
分析:图6为依照Windows CP936(内码)编码天生的16Pixel中文点阵字库,只包含了一级码汉字(3755个字符),‘啊’的编码为:B0A1H。
上述所述,不管是区位码,国标码,照旧机内码,主要都是针对GB2312-80标准(7K+字符),若按区位码94×94矩阵盘算,最大也只能表达94×94=8836个字符,这时有人约莫会问,若要支持更多的中文怎样办呢?
这天然难不倒勤劳又机敏的“中国人”。看懂底下这张图,就都明白了。
分析:这里主要纪录汉字编码,并且第一字节最高位皆为‘1’,也能很好的做到向前兼容。
- GB2312-80,字符数 6763 = ①
- GBK,字符数 21003 = ①+②+③
- GB18030-2000,字符数 27533 = ①+②+③+④
- GB18030-2005,字符数 70244 = ①+②+③+④+⑤
想要了解更多,保举看看这篇文章:“国度标准代码 – 百度百科”。
四、Unicode
Unicode 是为了处理传统字符编码方案的范围而产生的,它为每种言语中的每个字符设定了一致并且唯一的二进制编码,以满意跨言语、跨平台举行文本转换、处理的要求,中文只是此中的一局部。由于Unicode编码(针对中文)不一连,只能靠查表办法处理编码转换成绩。
图7. Unicode
分析:‘啊’的Unicode码值为 554AH。
五、总结
- 图解
- 编码转换
区位码、国标码、机内码之间递进式转换,都在这张表里了。
随着社会提高不休更新迭代,区位码、国标码在使用场景上已徐徐淡出了用户视野,如今最常用的则是内码,Unicode。
说了这么多,想想,若没有这些先辈们的坚持与积极,约莫我们今天还在用ASCII盘算机呢!
感激一切为中文编码静静奉献的人!
参考文献:
- 汉字区位码比力表.pdf
- 百度百科
- 知乎