前段时间经理让把现在erp系统中的员工名称字段也就是员工登录信息更新为拼音,上网上找了一下,有很多,但是建了个demo发现都不能转换的很完美,总是这样那样的字转换错误,不如人意。最后在意论坛上看到微软提供了一个ChnCharInfo.dll(Microsoft.International.Converters.PinYinConverter 命名空间包含了拼音和笔画转换工具的类。 ),这个类很强大,遇到多音字可以全部转换出来,测试中没有发现任何问题。下面直接贴代码:
using Microsoft.International.Converters.PinYinConverter;
using System.Collections.ObjectModel;
UserHandler userH = new UserHandler();
List<UserEntity> userList = userH.GetAllUser();
userList.ForEach(p => {
string pinyinName = string.Empty;
string zhongwenName = p.Name;
bool mark = true;
//逐字进行转换
for (int i = 0; i < zhongwenName.Length; i++)
{
Char ch = Convert.ToChar(zhongwenName[i]);
//识别给出的字符串是否是一个有效的汉字字符。
if (ChineseChar.IsValidChar(ch))
{
mark = true;
ChineseChar chineseChar = new ChineseChar(ch);
ReadOnlyCollection<string> readOnlyDinosaurs = chineseChar.Pinyins;
pinyinName += readOnlyDinosaurs[0].Substring(0, readOnlyDinosaurs[0].Length - 1).ToLower();
}
else
{
mark = false;
}
}
if (mark)
{
p.Name = pinyinName;
//检测Name字段不能插入重复的拼音Name
if (userH.GetUserByName(pinyinName)==null)
{
userH.ModifyUser(p);
}
}
//p.Name=pinyinName;
});
MessageBox.Show("执行完成!");
ChnCharInfo.dll文件以及帮助文档可以在我csdn资源中找到,本来是准备提供一个url下载地址的,可是上传资源后发现csdn没有给我显示出来,刷新了几次都是同样的结果,这也许是csdn的一个bug,过段时间再次登录就会发现上次上传的资源可以看到了,以前遇到过,郁闷!