用C#获取汉字的区位码

首先复习一下计算机基础知识:
  计算机中最底层的数据都是用二进制及0和1来表示的。每个0或1称作1位,第8位二进制数叫做1个字节,它可以表示ASCII码中的一个字符。中文计算机中用两个字节即16位二进制来表示一个汉字。而在Unicode编码中所有的符号(包括汉字,英文,标题及其它众多符号)都是为两字节(16)位来表示。
  GB2312码是中华人民共和国国家汉字信息交换用编码,全称《信息交换用汉字编码字符集——基本集》,由国家标准总局发布,1981年5月1日实施,通行于大陆。新加坡等地也使用此编码。
  GB2312收录简化汉字及符号、字母、日文假名等共7445个图形字符,其中汉字占6763个。GB2312规定“对任意一个图形字符都采用两个字节表示,每个字节均采用七位编码表示”,习惯上称第一个字节为“高字节”,第二个字节为“低字节”。
  GB2312将代码表分为94个区,对应第一字节;每个区94个位,对应第二字节,两个字节的值分别为区号值和位号值加32(2OH),因此也称为区位码。01-09区为符号、数字区,16-87区为汉字区,10-15区、88-94区是有待进一步标准化的空白区。GB2312将收录的汉字分成两级:第一级是常用汉字计3755个,置于16-55区,按汉语拼音字母/笔形顺序排列;第二级汉字是次常用汉字计3008个,置于56-87区,按部首/笔画顺序排列。故而GB2312最多能表示6763个汉字。
  国标码是一个四位十六进制数,区位码是一个四位的十进制数,每个国标码或区位码都对应着一个唯一的汉字或符号,但因为十六进制数我们很少用到,所以大家常用的是区位码,它的前两位叫做区码,后两位叫做位码。
  通常,在DOS下的各汉字系统中,同时按Alt键和F1键即可调用区位码输入方法。而在Windows中常用Ctrl+空格键和Ctrl+Shift键调出区位码。如“2901”代表“健”字,“4582”代表“万”字,“8150”代表“楮”字,这些都是汉字,用区位码还可以很轻松地输入特殊符号,比如,“0189”代表“※”(符号),“0528”代表“ゼ”(日本语),“0711”代表“Й”(俄文),“0949”代表“┭”(制表符)。
  在区位码中,01-09区为特殊字符,10-55区为一级汉字(3755个最常用的汉字,按拼音字母的次序排列),56-87区为二级汉字(3008个汉字,按部首次序排列), 在区位码汉字输入方法中,汉字编码无重码。
GBK
  GB2312-80仅收汉字6763个,这大大少于现有汉字,随着时间推移及汉字文化的不断延伸推广,有些原来很少用的字,现在变成了常用字,例如:朱镕基的“镕”字,未收入GB2312-80,现在大陆的报业出刊只得使用(金+容)、(金容)、(左金右容)等来表示,形式不一而同,这使得表示、存储、输入、处理都非常不方便,对于搜索引擎等软件的构造来说也不是好消息,而且这种表示没有统一标准。从我们对人民日报98年数据的处理过程中,得出这样的经验:回填外字最困难的就是如何得到这种表示方法的集合。
  为了解决这些问题,以及配合UNICODE的实施,全国信息技术化技术委员会于1995年12月1日《汉字内码扩展规范》。GBK向下与GB2312完全兼容,向上支持ISO 10646国际标准,在前者向后者过渡过程中起到的承上启下的作用。GBK 亦采用双字节表示,总体编码范围为8140-FEFE之间,首字节在81-FE之间,尾字节在40-FE之间,剔除XX7F一条线。
  GBK共收入21886个汉字和图形符号,包括:
GB2312中的全部汉字、非汉字符号。
BIG5中的全部汉字。
与ISO 10646相应的国家标准GB13000中的其它CJK汉字,以上合计20902个汉字。
其它汉字、部首、符号,共计984个。
汉字编码的常识
我们知道,英文字符一般是以一个字节来表示的,最常用的编码方法是 ASCII 。但一个
字节最多只能区分256个字符,而汉字成千上万,所以现在都以双字节来表示汉字,为了
能够与英文字符分开,每个字节的最高位一定为1,这样双字节最多可以表示64K格字符
。我们经常碰到的编码方式有 GB2312、BIG5、UNICODE 等。关于具体编码方式的详细资
料,有兴趣的读者可以查阅相关资料。我肤浅谈一下和我们关系密切的 GB2312 和 UNI
CODE。GB2312 码,中华人民共和国国家标准汉字信息交换用编码,是一个由中华人民共
和国国家标准总局发布的关于简化汉字的编码,通行于中国大陆地区及新加坡,简称国
标码。两个字节中,第一个字节(高字节)的值为区号值加32(20H),第二个字节(低
字节)的值为位号值加32(20H),用这两个值来表示一个汉字的编码。UNICODE 码是微
软提出的解决多国字符问题的多字节等长编码,它对英文字符采取前面加“0”字节的策
略实现等长兼容。如 “A” 的 ASCII 码为0x41,UNICODE 就为0x00,0x41。利用特殊
的工具各种编码之间可以互相转换。
在System.Text命名空间中包含众多编码的类,可供进行操作及转换,下面用两个实例来进行区位码及汉字之间的互换,希望能起到举一反三的效果,让大家可以轻松处理文字编码方面的问题:
using System;
using System.Text;
class CodingChange
{
public string CharacterToCoding(string character)
{
string coding = “”;
for (int i = 0; itest
1162ec4e847627592d4efd560cff2f667d5928578476004e2a4eb65b2e00
我们的大中国,是好在的一个家.