首页 > 学院 > 开发设计 > 正文

汉字转拼音

2019-11-17 03:22:03
字体:
来源:转载
供稿:网友

汉字转拼音 - 输入汉字获取其拼音

前不久看到有的朋友实现对商品名称拼音的录入,发现他的实现方式是手动输入的,—_—#、同志们,福利来了!

 本文刚发布时,只写了一个实现方式,使用的是微软的语言包,但是对多音字的效果不怎么理想,甚至个别字会出现很诡异的错误,因此,现在扩展另一个方法,手动实现。

方式一、使用微软语言包 微软为了开发者实现国际化语言的互转,提供了Microsoft Visual Studio International Pack,这个扩展包里面有中文、日文、韩文、英语等各国语言包,并提供方法实现互转、获取拼音、获取字数、甚至获取笔画数等等。

 [这种方式对多音字的效果不怎么理想,但是,这个方法比较简单,直接导入包就可以了,因此,对于那些只需要个别语句进行处理的或者不注重多音字的,可以使用这种方式,毕竟简便嘛。] 在这里示例讲的是输入汉字,获取其拼音,获取拼音和获取拼音首字母实现效果分别如下:1.jpg 2.jpg 首先,去微软官网下载Microsoft Visual Studio International Pack语言包,下载地址分别如下:Microsoft Visual Studio International Pack 1.0 SR1、Microsoft Visual Studio International Feature Pack 2.0 下载后分别是“vsintlpack1.zip”、“Vsintlpack2.msi”、双击“Vsintlpack2.msi”安装、路径随意、但是要记得、因为一会要引用的、 安装“Vsintlpack2.msi”之后、解压“vsintlpack1.zip”、里面包含七个语言包、 例如中文转拼音“CHSPinYinConv.msi”、简体繁体互转“CHTCHSConv.msi”等等。。 在这里我们用到的是“CHSPinYinConv.msi”、双击安装成功后、打开Visual Studio、新建一个WinForm项目、窗体布局如上图所示、

首先:添加刚刚安装的语言包引用:

“D:/PRogram Files (x86)/Microsoft Visual Studio International Pack/Simplified Chinese Pin-Yin Conversion Library/ChnCharInfo.dll”

默认是C盘、在这里我安装在D盘了,然后添加using引用:

1 using Microsoft.International.Converters.PinYinConverter;//导入拼音相关

 创建获取拼音的方法:

 1 /// <summary>  2 /// 汉字转化为拼音 3 /// </summary>  4 /// <param name="str">汉字</param>  5 /// <returns>全拼</returns>  6 public static string GetPinyin(string str) 7 { 8     string r = string.Empty; 9     foreach (char obj in str)10     {11         try12         {13             ChineseChar chineseChar = new ChineseChar(obj);14             string t = chineseChar.Pinyins[0].ToString();15             r += t.Substring(0, t.Length - 1);16         }17         catch18         {19             r += obj.ToString();20         }21     }22     return r;23 }
汉字转化为拼音

 创建获取汉字拼音首字母的方法:

 1 /// <summary>  2 /// 汉字转化为拼音首字母 3 /// </summary>  4 /// <param name="str">汉字</param>  5 /// <returns>首字母</returns>  6 public static string GetFirstPinyin(string str) 7 { 8     string r = string.Empty; 9     foreach (char obj in str)10     {11         try12         {13             ChineseChar chineseChar = new ChineseChar(obj);14             string t = chineseChar.Pinyins[0].ToString();15             r += t.Substring(0, 1);16         }17         catch18         {19             r += obj.ToString();20         }21     }22     return r;23 }
汉字转化为拼音首字母

 然后在“转拼音”按钮的点击事件中调用上述方法:

1 // 汉字转拼音2 private void btn_One_Click(object sender, EventArgs e)3 {4     string source = this.txt_ChineseCharacter_One.Text.Trim();  // 得到输入的源字符5     string result = GetPinyin(source);  // 调用方法,获取拼音6     this.txt_Pinyin_One.Text = result;7 }
然后在“转拼音”按钮的点击事件中调用上述方法

 在“转首字母”按钮点击事件中调用上述方法:

1 // 转首字母2 private void btn_Two_Click(object sender, EventArgs e)3 {4     string source = this.txt_ChineseCharacter_One.Text.Trim();  // 得到输入的源字符5     string result = GetFirstPinyin(source);  // 调用方法,获取拼音6     this.txt_Pinyin_One.Text = result;7 }
在“转首字母”按钮点击事件中调用上述方法:

 到此,已经完成了80%,运行程序,你会发现,当点击“转拼音”的时候,结果是这样子的:3.jpg并不是我开始说的那种“Gu Ying”的效果啊、这是因为我在获取拼音的时候简单的处理了一下:

 1 // 汉字转拼音 2 private void btn_One_Click(object sender, EventArgs e) 3 { 4     string source = this.txt_ChineseCharacter_One.Text.Trim();  // 得到输入的源字符 5  6     string result = string.Empty;   // 转拼音的结果 7     string temp = string.Empty; // 下面foreach用到的临时变量 8     foreach (char item in source)   // 遍历每个源字符 9     {10         temp = GetPinyin(item.ToString());  // 将每个字符转拼音11         // 处理:获取首字母大写、其余字母小写12         result += (String.Format("{0}{1} ", temp.Substring(0, 1).ToUpper(), temp.Substring(1).ToLower()));13     }14 15     //string result = GetPinyin(source);  // 调用方法,获取拼音16     this.txt_Pinyin_One.Text = result;17 }
处理拼音结果

 OK、到此、这个功能已经实现完成了,还有其余的语言包功能,和此类似,大家可以百度“Microsoft Visual Studio International Pack使用”、各种语言之间的互转及功能示例就出来了。

方式二、手动编码实现

 这种方式其实也不困难,说白了就是根据Unicode编码值,定义对应的拼音数组或集合,然后实现此效果。

首先定义拼音区编码数组:

 1 //定义拼音区编码数组 2 private static int[] getValue = new int[] 3     { 4         -20319,-20317,-20304,-20295,-20292,-20283,-20265,-20257,-20242,-20230,-20051,-20036, 5         -20032,-20026,-20002,-19990,-19986,-19982,-19976,-19805,-19784,-19775,-19774,-19763, 6         -19756,-19751,-19746,-19741,-19739,-19728,-19725,-19715,-19540,-19531,-19525,-19515, 7         -19500,-19484,-19479,-19467,-19289,-19288,-19281,-19275,-19270,-19263,-19261,-19249, 8         -19243,-19242,-19238,-19235,-19227,-19224,-19218,-19212,-19038,-19023,-19018,-19006, 9         -19003,-18996,-18977,-18961,-18952,-18783,-18774,-18773,-18763,-18756,-18741,-18735,10         -18731,-18722,-18710,-18697,-18696,-18526,-18518,-18501,-18490,-18478,-18463,-18448,11         -18447,-18446,-18239,-18237,-18231,-18220,-18211,-18201,-18184,-18183, -18181,-18012,12         -17997,-17988,-17970,-17964,-17961,-17950,-17947,-17931,-17928,-17922,-17759,-17752,13         -17733,-17730,-17721,-17703,-17701,-17697,-17692,-17683,-17676,-17496,-17487,-17482,14         -17468,-17454,-17433,-17427,
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表