之前由于项目需要,中间需要一个汉字转拼音和首拼的功能来做查询,感觉这种功能基本已经成熟化了,于是查找了相关的代码,首先引入眼帘的是下面两篇文章

1.C# 汉字转拼音(支持GB2312字符集中所有汉字)
2.Javascript实现汉字和拼音互转的终极方案
写的比较全也很详细,都有提供源码,大家可以参考下。
由于考虑到接口的需要,于是参考了 第一篇,文章中作者的源码基本能满足汉字转拼音的需要,对于其他特殊的字符,也可以在进行添加补充,不足之处就是不支持多音字,由于需要支持多音字的查询,所以后面有查了下其他的文章,发现还没有现成的文章(也可能本人的搜索水平比较水)。后来查找发现对于汉字转拼音,原来微软已经提供了 Microsoft Visual Studio International Pack ,而且很强大。于是试了一下
首先在nuget引用对应的包
查找 PinYinConverter
简单的demo
小试一下,使用也非常简单,只要直接使用ChineseChar类进行装换就好
string ch = Console.ReadLine(); ChineseChar cc = new ChineseChar(ch[0]); var pinyins = cc.Pinyins.ToList(); pinyins.ForEach(Console.WriteLine);
结果如下:
我们可以看到, 行 的多音字有 hang,heng,xing 三个,这里连音标也出来了,确实很方便。而我需要的功能是输入 银行 ,然后转换为拼音是 yinhang,yinheng,yinxing, 首拼是 yh,yx。有ChineseChar 这个类的话做起来思路就简单了。
汉字转拼音类封装
1.首先对输入的汉字进行拆分
2.接着每个汉字用ChineseChar 获取多个拼音
3.然后除去数字,去重,提取首字符,再在进行组合就好了
于是写了个帮助类进行装换,代码如下:
public class PinYinConverterHelp
{
public static PingYinModel GetTotalPingYin(string str)
{
var chs = str.ToCharArray();
//记录每个汉字的全拼
Dictionary<int, List<string>> totalPingYins = new Dictionary<int, List<string>>();
for (int i = 0; i < chs.Length; i++)
{
var pinyins = new List<string>();
var ch = chs[i];
//是否是有效的汉字
if (ChineseChar.IsValidChar(ch))
{
ChineseChar cc = new ChineseChar(ch);
pinyins = cc.Pinyins.Where(p => !string.IsNullOrWhiteSpace(p)).ToList();
}
else
{
pinyins.Add(ch.ToString());
}
//去除声调,转小写
pinyins = pinyins.ConvertAll(p => Regex.Replace(p, @"\d", "").ToLower());
//去重
pinyins = pinyins.Where(p => !string.IsNullOrWhiteSpace(p)).Distinct().ToList();
if (pinyins.Any())
{
totalPingYins[i] = pinyins;
}
}
PingYinModel result = new PingYinModel();
foreach (var pinyins in totalPingYins)
{
var items = pinyins.Value;
if (result.TotalPingYin.Count <= 0)
{
result.TotalPingYin = items;
result.FirstPingYin = items.ConvertAll(p => p.Substring(0, 1)).Distinct().ToList();
}
else
{
//全拼循环匹配
var newTotalPingYins = new List<string>();
foreach (var totalPingYin in result.TotalPingYin)
{
newTotalPingYins.AddRange(items.Select(item => totalPingYin + item));
}
newTotalPingYins = newTotalPingYins.Distinct().ToList();
result.TotalPingYin = newTotalPingYins;
//首字母循环匹配
var newFirstPingYins = new List<string>();
foreach (var firstPingYin in result.FirstPingYin)
{
newFirstPingYins.AddRange(items.Select(item => firstPingYin + item.Substring(0, 1)));
}
newFirstPingYins = newFirstPingYins.Distinct().ToList();
result.FirstPingYin = newFirstPingYins;
}
}
return result;
}
}
public class PingYinModel
{
public PingYinModel()
{
TotalPingYin = new List<string>();
FirstPingYin = new List<string>();
}
//全拼
public List<string> TotalPingYin { get; set; }
//首拼
public List<string> FirstPingYin { get; set; }
}
调用方式:
Console.WriteLine("请输入中文:");
string str = Console.ReadLine();
var strs = PinYinConverterHelp.GetTotalPingYin(str).TotalPingYin;
var frists = PinYinConverterHelp.GetTotalPingYin(str).FirstPingYin;
Console.WriteLine("全拼音:" + String.Join(",", strs));
Console.WriteLine("首音:" + String.Join(",", frists));
Console.WriteLine();
结果:
目前试过一些生僻字都是能支持,对于一些太偏的还没试过,不过对于一般汉字转拼音的,多音字支持这里就已经足够了。
这里仅仅是使用了 Microsoft Visual Studio International Pack 这个扩展包里面的汉字转拼音功能,其实里面还有中文、日文、韩文、英语等各国语言包,并提供方法实现互转、获、获取字数、甚至获取笔画数等等强大的功能,有兴趣的朋友可以自行查询下它的api。
源码分享
分享是一种美德,有时候文章可以提高我们的技术层面,但有时候更多的需求是业务层面,很多小知识应用的分享却可以帮我们提高业务层面的问题。只要分享的知识点有用,不误人子弟,哪怕大小都是一种学习,所以也希望大家能勇于分享。
最后,源码分享出来给大家,如果有错误和不足的地方,也希望指正
地址:demo
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# c# 汉字转拼音 多音字
# c# 汉字转拼音
# C#实现汉字转汉语拼音的示例代码
# C#实现汉字转换为拼音缩写的代码
# C#实现汉字转拼音或转拼音首字母的方法
# C# 获取汉字的拼音首字母
# C#获取汉字字符串拼音首字母的方法
# C# 汉字转拼音(全拼和首字母)实例
# C# 汉字转化拼音的简单实例代码
# C# 汉字与拼音互转的实现示例
# 都是
# 全拼
# 试过
# 的是
# 生僻字
# 都有
# 来了
# 还没有
# 还没
# 多个
# 日文
# 就好
# 其他的
# 也很
# 微软
# 给大家
# 请输入
# 而我
# 有兴趣
# 可以看到
相关文章:
建站主机是否等同于虚拟主机?
如何在腾讯云免费申请建站?
如何在云指建站中生成FTP站点?
如何在Windows虚拟主机上快速搭建网站?
,南京靠谱的征婚网站?
无锡营销型网站制作公司,无锡网选车牌流程?
宝塔建站助手安装配置与建站模板使用全流程解析
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
建站主机选哪家性价比最高?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略
定制建站哪家更专业可靠?推荐榜单揭晓
如何用腾讯建站主机快速创建免费网站?
建站之星与建站宝盒如何选择最佳方案?
如何快速生成高效建站系统源代码?
如何选择适配移动端的WAP自助建站平台?
建站之家VIP精选网站模板与SEO优化教程整合指南
如何通过FTP服务器快速搭建网站?
建站之星代理如何优化在线客服效率?
c# 在ASP.NET Core中管理和取消后台任务
番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?
制作销售网站教学视频,销售网站有哪些?
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
如何快速搭建高效WAP手机网站?
如何基于云服务器快速搭建网站及云盘系统?
C#怎么创建控制台应用 C# Console App项目创建方法
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
专业公司网站制作公司,用什么语言做企业网站比较好?
制作网站的软件免费下载,免费制作app哪个平台好?
seo网站制作优化,网站SEO优化步骤有哪些?
实惠建站价格推荐:2025年高性价比自助建站套餐解析
桂林网站制作公司有哪些,桂林马拉松怎么报名?
北京营销型网站制作公司,可以用python做一个营销推广网站吗?
营销式网站制作方案,销售哪个网站招聘效果最好?
建站主机选购指南与交易推荐:核心配置解析
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
购物网站制作公司有哪些,哪个购物网站比较好?
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
如何通过VPS搭建网站快速盈利?
长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?
建站ABC备案流程中有哪些关键注意事项?
山东云建站价格为何差异显著?
如何在建站主机中优化服务器配置?
广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?
建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析
威客平台建站流程解析:高效搭建教程与设计优化方案
建站之星如何修改网站生成路径?
定制建站价位费用解析与套餐推荐全攻略
网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?
中山网站制作网页,中山新生登记系统登记流程?
*请认真填写需求信息,我们会在24小时内与您取得联系。