博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#汉字转拼音
阅读量:4544 次
发布时间:2019-06-08

本文共 4332 字,大约阅读时间需要 14 分钟。

下载并引入两个dll文件  和  

  其实这两个dll 任何一个都可以实现汉字转拼音,然而 NPinyin.dll 收录的汉字并不全,但是很人性化,能识别一些常用的汉字。ChnCharInfo.dll 是微软的很全但是不人性化。另外本套代码外有一个自己维护的个别汉字文件,例如一些多音字姓氏。

  本程序的使用场景是姓名转拼音,所以先判断第一个汉字是否在自己维护的拼音库中存在,如果存在者优先使用这个库中汉字所对应的拼音,如果不存在者优先使用NPinyin库中转化拼音的方法,转化失败再使用微软提供的ChnCharInfo中转拼音的方法。

  Main函数

static void Main(string[] args)        {            string path = @"PinYinDic.txt";            StreamReader sr = new StreamReader(path, Encoding.Default);            Dictionary
pinyinDic = JsonConvert.DeserializeObject
>(sr.ReadToEnd()); string name = "薄露露"; Console.WriteLine(name+PinYinHelper.ConvertToAllSpell(name, pinyinDic).ToLower()); Console.ReadKey(); }
PinYinHelper类
public class PinYinHelper    {        private static Encoding gb2312 = Encoding.GetEncoding("GB2312");        ///         /// 汉字转全拼        ///         ///         /// 
public static string ConvertToAllSpell(string strChinese, IDictionary
pinyinDic = null) { try { if (strChinese.Length != 0) { StringBuilder fullSpell = new StringBuilder(); for (int i = 0; i < strChinese.Length; i++) { var chr = strChinese[i]; string pinyin = string.Empty; if (i == 0) { pinyin = GetFromPinYinDic(chr, pinyinDic); } if (pinyin.Length == 0) { pinyin = GetSpell(chr); } fullSpell.Append(pinyin); } return fullSpell.ToString().ToLower(); } } catch (Exception e) { Console.WriteLine("全拼转化出错!" + e.Message); } return string.Empty; } ///
/// 汉字转首字母 /// ///
///
public static string GetFirstSpell(string strChinese) { //NPinyin.Pinyin.GetInitials(strChinese) 有Bug 洺无法识别 //return NPinyin.Pinyin.GetInitials(strChinese); try { if (strChinese.Length != 0) { StringBuilder fullSpell = new StringBuilder(); for (int i = 0; i < strChinese.Length; i++) { var chr = strChinese[i]; fullSpell.Append(GetSpell(chr)[0]); } return fullSpell.ToString().ToUpper(); } } catch (Exception e) { Console.WriteLine("首字母转化出错!" + e.Message); } return string.Empty; } private static string GetSpell(char chr) { var coverchr = NPinyin.Pinyin.GetPinyin(chr); bool isChineses = ChineseChar.IsValidChar(coverchr[0]); if (isChineses) { ChineseChar chineseChar = new ChineseChar(coverchr[0]); foreach (string value in chineseChar.Pinyins) { if (!string.IsNullOrEmpty(value)) { return value.Remove(value.Length - 1, 1); } } } return coverchr; } ///
/// 从字典获取拼音 /// ///
字 ///
字典 ///
private static string GetFromPinYinDic(char c, IDictionary
pinyinDic) { if (pinyinDic == null || pinyinDic.Count == 0 || !pinyinDic.ContainsKey(c)) { return ""; } return pinyinDic[c]; } }

接下来是本程序维护的 PinYinDic.txt,该文件放在"\bin\Debug"目录下,当然也可以不使用。

{"红":"hong","贾":"jia","薄":"bo","褚":"chu","翟":"zhai","郇":"xun","盖":"ge","乐":"yue","区":"ou","卜":"bu","曾":"zeng","丁":"ding","无":"wu","长":"chang","其":"qi","巷":"xiang","将":"jiang","氏":"shi","色":"se","系":"xi","重":"chong","乜":"nie","孛":"bo","卒":"zu","单":"shan","解":"xie","仇":"qiu","隗":"wei","查":"zha","繁":"po","朴":"piao"}

 

转载于:https://www.cnblogs.com/soundcode/p/10239417.html

你可能感兴趣的文章
C# 使用默认浏览器打开链接
查看>>
【M13】以by reference 方式捕捉exceptions
查看>>
[HTML5] Blob对象
查看>>
搭建TC开发环境详细教程
查看>>
css3背景渐变+2D
查看>>
拓扑图软件技术对比(转载)
查看>>
学习笔记——CDQ分治
查看>>
java校验银行卡号
查看>>
使用Jquery Viewer 展示图片信息
查看>>
mysql 备份
查看>>
USACO 3.2 Factorials
查看>>
maven学习
查看>>
项目人力资源管理
查看>>
Winform ListView虚拟模式
查看>>
j2ee 分布式布署 RPC基础知识
查看>>
Ext.Net学习笔记23:Ext.Net TabPanel用法详解
查看>>
机器学习---算法---支持向量机---线性SVM--第一部分
查看>>
高并发服务器---基础----IO模式和IO多路复用
查看>>
web-Amazon
查看>>
[springmvc]mapping request
查看>>