.net汉字转字母
目前手上有一个需要实现:将用户输入的姓名转换成汉语拼音。
使用枚举,既麻烦又易出错,发现有一个微软拼音转换工具类ChnCharInfo.dll,在此记录下:
首先需要引入此dll,
链接: http://pan.baidu.com/s/1hsa9Y40 密码: ijdi
写一个转换的Helper类:
public class ChineseToCharHelper
{
/// <summary>得到汉字拼音(Item1:全拼 2:首字母缩写 3:大写开头全拼)</summary>
/// <param name="chinese"></param>
/// <returns></returns>
public static Tuple<string, string, string> PinYinString(string chinese)
{
if (string.IsNullOrWhiteSpace(chinese)) return new Tuple<string, string, string>(string.Empty, string.Empty, string.Empty);
char[] ch = chinese.ToArray();
string allPinYin = string.Empty, abbPinYin = string.Empty, firstAllPinYin = string.Empty;
foreach (char c in ch)
{
if (ChineseChar.IsValidChar(c))
{
ChineseChar chineseChar = new ChineseChar(c);
ReadOnlyCollection<string> pinyin = chineseChar.Pinyins;
var duoyinList = pinyin.Where(x => !string.IsNullOrWhiteSpace(x)).Select(x => x.Length >= ? x.Substring(, x.Length - ).ToLower() : string.Empty).ToList();
var dic = duoyinList.GroupBy(x => x).ToDictionary(x => x.Key, y => y.Count()).OrderByDescending(x => x.Value);
if (dic.Any())
{
if (dic.First().Value.Equals())
{
abbPinYin += pinyin[] != null && pinyin[].Length >=
? pinyin[].Substring(, )
: string.Empty;
allPinYin += pinyin[] != null && pinyin[].Length >
? pinyin[].Substring(, pinyin[].Length - )
: pinyin[] != null && pinyin[].Length.Equals()
? pinyin[].Substring(, )
: string.Empty;
var temp = pinyin[] != null && pinyin[].Length >
? pinyin[].Substring(, pinyin[].Length - )
: pinyin[] != null && pinyin[].Length.Equals()
? pinyin[].Substring(, )
: string.Empty;
firstAllPinYin += System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(temp.ToLower());
}
else
{
var value = dic.First().Key;
abbPinYin += value.Length >= ? value.Substring(, ) : string.Empty;
allPinYin += value;
firstAllPinYin += System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(value.ToLower());
}
}
}
else
{
abbPinYin += c.ToString();
allPinYin += c.ToString();
firstAllPinYin += System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(c.ToString().ToLower());
}
}
return new Tuple<string, string, string>(allPinYin.ToLower(), abbPinYin.ToLower(), firstAllPinYin);
}
}
直接调用就可以啦。
但是,组件存在BUG:
就像图中显示的样子,“汤” ,转换后的拼音是错误的。
其他的汉字转化吗,到还有发现。毕竟少数,特殊处理下就可以了,组件还是可用的。
.net汉字转字母的更多相关文章
- SQL SERVER 得到汉字首字母函数四版全集 --【叶子】
--创建取汉字首字母函数(第三版) create function [dbo].[f_getpy_V3] ( ) ) ) as begin ),) ,@len = len(@col),@sql = ' ...
- MSSQL 获取汉字全拼 和 汉字首字母
--获取全拼 DECLARE @str VARCHAR(max) SET @str= [dbo].[fn_Getquanpin]('中山') PRINT(@str) )) ) as begin ),) ...
- JS获取汉字首字母
//获取 汉字首字母 function makePy(str) { if (typeof (str) != "string") throw new Error(-1, " ...
- ASP.NET获取汉字首字母
/// <summary> /// 获取汉字首字母(可包含多个汉字) /// </summary> /// <param name="strText" ...
- php获取汉字首字母
php获取汉字首字母,可以用于按字母对数据进行检索排序等. 分享下网上找的代码.亲测有效. function getFirstCharter($str){ if(empty($str)){return ...
- sql server 提取汉字/数字/字母的方法
sql server 提取汉字/数字/字母的方法 --提取数字 IF OBJECT_ID('DBO.GET_NUMBER2') IS NOT NULL DROP FUNCTION DBO.GET_NU ...
- mysql和SqlServer 中取得汉字字段的各汉字首字母
mysql 中取得汉字字段的各汉字首字母 这个转载于http://blog.csdn.net/lky5387/article/details/11973721 DELIMITER ;;CREATE ...
- 【PHP原生】获取字符串所有汉字首字母和首个汉字首字母
1.废话不多说,看代码,获取字符串汉字首字母,兼容GBK和UTF-8 <?php //获取单个汉字拼音首字母.注意:此处不要纠结.汉字拼音是没有以U和V开头的 function getfirst ...
- JS实现获取汉字首字母拼音、全拼音及混拼音的方法
本文实例讲述了JS实现获取汉字首字母拼音.全拼音及混拼音的方法.分享给大家供大家参考,具体如下: 这里需要用到一个js获取汉字拼音的插件,可点击此处本站下载. 运行效果如下: 完整示例代码: ? 1 ...
- .NET获取汉字首字母
/// <summary> /// 获取汉字首字母(可包含多个汉字) /// </summary> /// <param name="strText" ...
随机推荐
- C语言 · 4-3水仙花数
问题描述 打印所有100至999之间的水仙花数.所谓水仙花数是指满足其各位数字立方和为该数字本身的整数,例如 153=1^3+5^3+3^3. 样例输入 一个满足题目要求的输入范例.例:无 样例输出 ...
- C# 多种方式发送邮件(附帮助类)
因项目业务需要,需要做一个发送邮件功能,查了下资料,整了整,汇总如下,亲测可用- QQ邮箱发送邮件 #region 发送邮箱 try { MailMessage mail = new MailMess ...
- (JS+CSS)实现图片放大效果
代码很简单,在这里就不过多阐述,先上示例图: 实现过程: html部分代码很简单 <div id="outer"> <p>点击图片</p> &l ...
- WebApi接口 - 如何在应用中调用webapi接口
很高兴能再次和大家分享webapi接口的相关文章,本篇将要讲解的是如何在应用中调用webapi接口:对于大部分做内部管理系统及类似系统的朋友来说很少会去调用别人的接口,因此可能在这方面存在一些困惑,希 ...
- win8.1硬盘安装ubuntu14.04双系统
在网上找了很多方法都失败了,原因是大多数方法都是用mbr方式安装的,如grub4dos,easybcd.以至于连自己都怀疑win8能不能用硬盘安装,差点就去买个u盘来安装了,就在打算放弃的时候在ubu ...
- # PHP - 使用PHPMailer发邮件
PHPMailer支持多种邮件发送方式,使用起来非常简单 1.下载PHPMailer https://github.com/PHPMailer/PHPMailer,下载完成加压后, 把下边的两个文件复 ...
- Could not evaluate expression
VS15 调试变量不能显示值,提示:Could not evaluate expression 解决办法: 选择"在调试时显示运行以单击编辑器中的按钮"重启VS即可. 可参考:Vi ...
- 使用EF CodeFirst 创建数据库
EntityFramework 在VS2015添加新建项时,选择数据->ADO.NET 实体数据模型,有一下选项 来自数据库的EF设计器,这个就是我们最常用的EntityFramework设计模 ...
- 关于DDD的学习资料汇总
DDD(Domain-Driven Design)领域驱动设计,第一次看到DDD是在学习ABP时,在其中的介绍中看到的.what,DDD是个什么鬼,我不是小白,是大白,没听过.于是乎,度娘查查查,找到 ...
- 【从零开始学BPM,Day2】默认表单开发
[课程主题]主题:5天,一起从零开始学习BPM[课程形式]1.为期5天的短任务学习2.每天观看一个视频,视频学习时间自由安排. [第二天课程] Step 1 软件下载:H3 BPM10.0全开放免费下 ...