最近开发一个类似于OUTLOOK联系人那样可以根据字母来过滤当前的联系人的模块,使用上了微软不久前提供的一个转换汉字为拼音的开发包,可以通过这里进行下载。使用的方法很简单,不过里面的方法都是对于一个汉字使用而言,而且会包含音调,譬如“张”,转换出来就会是“ZHANG1”,“学”,转换出来就会是“XUE2”,如此类推。因此自己再封装一下达到可以整个姓名转换成拼音,并去掉没用的音调。代码如下:
- public class PinYinConverter
- {
- /// <summary>
- /// 将字符串转换成拼音
- /// </summary>
- /// <param name="chineseStr">姓名字符串</param>
- /// <param name="includeTone">是否包含音调</param>
- /// <returns></returns>
- public static string ConvertToPinYin(string chineseStr, bool includeTone)
- {
- if (chineseStr == null)
- throw new ArgumentNullException("chineseStr");
- char[] charArray = chineseStr.ToCharArray();
- StringBuilder sb = new StringBuilder();
- foreach (char c in charArray)
- {
- ChineseChar chineseChar = new ChineseChar(c);
- ReadOnlyCollection<string> pyColl = chineseChar.Pinyins;
- foreach (string py in pyColl)
- {
- sb.Append(py);
- }
- }
- if (!includeTone)
- {
- StringBuilder sb2 = new StringBuilder();
- foreach (char c in sb.ToString())
- {
- if (!char.IsNumber(c))
- sb2.Append(c);
- }
- return sb2.ToString();
- }
- return sb.ToString();
- }
- public static string ConvertToPinYin(string chineseStr)
- {
- return ConvertToPinYin(chineseStr, true);
- }
- public static bool IsValidChar(char ch)
- {
- return ChineseChar.IsValidChar(ch);
- }
- /// <summary>
- /// 是否为有效的中文字
- /// </summary>
- /// <param name="chn"></param>
- /// <returns></returns>
- public static bool IsValidChinese(string chn)
- {
- if (chn == null)
- throw new ArgumentNullException("chn");
- foreach (char c in chn)
- {
- if (!IsValidChar(c))
- return false;
- }
- return true;
- }
- }

本文介绍了如何使用C#将汉字转换为拼音,通过微软提供的开发包,实现了姓名到拼音的转换,包括去除音调的功能。提供了一个名为PinYinConverter的类,包含了多个静态方法,如ConvertToPinYin,用于处理汉字转拼音的需求。
5307

被折叠的 条评论
为什么被折叠?



