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的转换会是怎样处理呢?有机会以后分解(当然方法不止一种)。

时间: 2024-12-15 01:32:47

GB2312简体中文转换为拼音的一种方法的相关文章

PHP汉字转拼音的两种方法+PHP提取汉字(中文)方法

方法一:根据ASCII码转换,GB2312库对多音字也无能为力. GB2312标准共收录6763个汉字,不在范围内的汉字是无法转换,如:中国前总理朱镕基的"镕"字. GB2312中对所收汉字进行了"分区"处理,每区含有94个汉字/符号.这种表示方式也称为区位码.01-09区为特殊符号.16-55区为一级汉字,按拼音排序.(3755个)56-87区为二级汉字,按部首/笔画排序.(3008个)10-15区及88-94区则未有编码.占用的码位是72*94=6768.其中有

Java List转换为字符串的几种方法

import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; import java.util.List; // 参考:https://blog.csdn.net/vasilis_1/article/details/75499087 public class ListToStringTest { public static String listToString1(List list, char separato

【C++】int转换为string的两种方法(to_string、字符串流)

本文转自http://blog.csdn.net/chavo0/article/details/51038397 记录一下用到过的int转换成string的两种方法 第一种是to_string函数,这是C++11新增的,使用非常方便,简单查了下:C++11标准增加了全局函数std::to_string,以及std::stoi/stol/stoll等等函数(这几个就是string转int,long,以及long long啦~) to_string这个函数还是很强大的! string to_stri

js中字符串转换为数值的两种方法的区别

在js中字符串转换为数值的方法有三种:转换函数,强制类型转换,隐式转换 1.转换函数 parseInt()   //将字符串转换为整型 parseFloat()  //将字符串转换为浮点型 转换函数在进行类型转换时是可以传入参数的,默认转换为10进制,转换成功后返回的是整数类型的数值. 例:1. parseInt('AB3', 16) //返回结果:2739,表示将字符串转换为16进制的数值 2.parseInt('13', 10) //返回结果:13,表示将字符串转换为10进制的数值 3.pa

python 将unicode编码转换为汉字的几种方法

str = '\u4eac\u4e1c\u653e\u517b\u7684\u722c\u866b' 方法1 使用unicode_escape 解码 print str.decode('unicode_escape') print unicode(str, 'unicode_escape') 方法2:若为json 格式,使用json.loads 解码 print json.loads('"%s"' %str) 方法3:使用eval print eval('u"%s"

JS字符串转换为JSON的四种方法笔记

1.jQuery插件支持的转换方式:  示例: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象 2.浏览器支持的转换方式(Firefox,chrome,opera,safari,ie)等浏览器: 示例: JSON.parse(jsonstr); //可以将json字符串转换成json对象 JSON.stringify(jsonobj); //可以将json对象转换成json对符串 注:ie8(兼容模式

Python -- 值转换为字符串的两种机制

可以通过以下两个函数来使用这两种机制:一是通过str函数,它会把值转换为合理形式的字符串,以便用户可以理解:而repr会创建一个字符串,它以合法的Python表达式的形式来表示值.下面是一些例子: >>> print repr("Hello, world!") 'Hello, world!' >>> print repr(10000L) 10000L >>> print str("Hello, world!")

C#中实现输入汉字获取其拼音(汉字转拼音)的2种方法

主要介绍了C#中实现输入汉字获取其拼音(汉字转拼音)的2种方法,本文分别给出了使用微软语言包.手动编码实现两种实现方式,需要的朋友可以参考下 本文刚发布时,只写了一个实现方式,使用的是微软的语言包,但是对多音字的效果不怎么理想,甚至个别字会出现很诡异的错误,因此,现在扩展另一个方法,手动实现. 方式一.使用微软语言包 微软为了开发者实现国际化语言的互转,提供了Microsoft Visual Studio International Pack,这个扩展包里面有中文.日文.韩文.英语等各国语言包,

15.输入一颗二元查找树,将该树转换为它的镜像, 即在转换后的二元查找树中,左子树的结点都大于右子树的结点, 用递归和循环两种方法完成树的镜像转换

转载请注明出处:http://www.cnblogs.com/wuzetiandaren/p/4260432.html  声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己也方便有类似问题的朋友,本文的思想也许有所借鉴,但源码均为本人实现,如有侵权,请发邮件表明文章和原出处地址,我一定在文章中注明.谢谢. 题目:输入一颗二元查找树,将该树转换为它的镜像, 即在转换后的二元查找树中,左子树的结点都大于右子树的结点, 用递归和循环两种方法完成树的镜像转换. 题目分析: