GB2312简体中文转换为拼音的一种方法
GBK是GB18030的子集(GB18030暂不追溯)。
GBK编码标准共收录汉字21003个、符号883个,并提供1894个造字码位,简、繁体字融于一库。
GB2312简体中文编码表:http://tools.jb51.net/table/gb2312
GB2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;同时,GB 2312收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个全角字符。整个字符集分成94个区,每区有94个位。
- GB2312,又称为GB0,由中国国家标准总局发布,1981年5月1日实施
- GB2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个
- GB2312是一种区位码。分为94个区(01-94),每区94个字符(01-94)
- 01-09区为特殊符号
- 10-15区没有编码
- 16-55区为一级汉字,按拼音排序,共3755个
- 56-87区为二级汉字,按部首/笔画排序,共3008个
- 88-94区没有编码
- GB2312只是编码表,在计算机中通常都是用"EUC-CN"表示法,即在每个区位加上0xA0来表示。区和位分别占用一个字节。
GB2312是GBK的子集。GB2312是中国国家标准的简体中文字符集。它所收录的汉字已经覆盖99.75%的使用频率,基本满足了汉字的计算机处理需要。GB2312编码包括符号、数字、字母、日文、制表符等,当然最主要的部分还是中文,它采用16位编码方式,简体中文的编码范围从B0A1一直到F7FE。如果我们把该编码的每8位用十进制来表示就是[176 | 161]到[247 | 254],这样对于每个中文字符,我们都可以通过两个值来表示它,如“啊”就是[176 | 161],“我”则是[206 | 210]。
通过上面的方法,我们就可以通过一个二维坐标对每一个中文字进行定位,从而建立一个二维表来实现中文和拼音的对应关系。当然我们会忽略一些特殊情况,比如汉字的多音字问题。由于一个拼音可能对应多个汉字,而拼音的组合本来就不多,因此我们首先建立一个拼音音节表,代码如下,里面列出了所有可能的组合情况,该表是一维数组。
在上面提到的二维表中,我们会保存音节表的索引值,来对应一个音节组合,如bao,而不是直接把音节组合保存在二维数组中,这样可以有效减少内存消耗。因此,二位数组中的所有值都应该是索引值,如数组元素[176][161]对应的应该是a的索引值0。
以C#语言简例:
首先输入汉字“我”,首先程序初始化一个GB2312编码对象
System.Text.Encoding encoding = System.Text.Encoding.GetEncoding("GB2312");
然后通过该对象获得“我”的编码数组
byte[] local = encoding.GetBytes(“我”);
local中的值应该是local[0]=206; local[1]=210。转换为十六进制,在CED2坐标位置可以找到“我”字。再查音节组合表,得索引值(可以根据具体需要修正索引)对应的是"wo",这样就完成了简体中文到拼音的转换。
由此可以想到多音字、或者GBK的转换会是怎样处理呢?有机会以后分解(当然方法不止一种)。