c# 汉字转拼音

来源:互联网 发布:c语言俄罗斯方块代码 编辑:程序博客网 时间:2024/04/28 14:31

 最近开发一个类似于OUTLOOK联系人那样可以根据字母来过滤当前的联系人的模块,使用上了微软不久前提供的一个转换汉字为拼音的开发包,可以通过这里进行下载。使用的方法很简单,不过里面的方法都是对于一个汉字使用而言,而且会包含音调,譬如“张”,转换出来就会是“ZHANG1”,“学”,转换出来就会是“XUE2”,如此类推。因此自己再封装一下达到可以整个姓名转换成拼音,并去掉没用的音调。代码如下:

 

  1. public class PinYinConverter
  2.     {
  3.         /// <summary>
  4.         /// 将字符串转换成拼音
  5.         /// </summary>
  6.         /// <param name="chineseStr">姓名字符串</param>
  7.         /// <param name="includeTone">是否包含音调</param>
  8.         /// <returns></returns>
  9.         public static string ConvertToPinYin(string chineseStr, bool includeTone)
  10.         {
  11.             if (chineseStr == null)
  12.                 throw new ArgumentNullException("chineseStr");
  13.             char[] charArray = chineseStr.ToCharArray();
  14.             StringBuilder sb = new StringBuilder();
  15.             foreach (char c in charArray)
  16.             {
  17.                 ChineseChar chineseChar = new ChineseChar(c);
  18.                 ReadOnlyCollection<string> pyColl = chineseChar.Pinyins;
  19.                 foreach (string py in pyColl)
  20.                 {
  21.                     sb.Append(py);
  22.                 }
  23.             }
  24.             if (!includeTone)
  25.             {
  26.                 StringBuilder sb2 = new StringBuilder();
  27.                 foreach (char c in sb.ToString())
  28.                 {
  29.                     if (!char.IsNumber(c))
  30.                         sb2.Append(c);
  31.                 }
  32.                 return sb2.ToString();
  33.             }
  34.             return sb.ToString();
  35.         }
  36.         public static string ConvertToPinYin(string chineseStr)
  37.         {
  38.             return ConvertToPinYin(chineseStr, true);
  39.         }
  40.         public static bool IsValidChar(char ch)
  41.         {
  42.             return ChineseChar.IsValidChar(ch);
  43.         }
  44.         /// <summary>
  45.         /// 是否为有效的中文字
  46.         /// </summary>
  47.         /// <param name="chn"></param>
  48.         /// <returns></returns>
  49.         public static bool IsValidChinese(string chn)
  50.         {
  51.             if (chn == null)
  52.                 throw new ArgumentNullException("chn");
  53.             foreach (char c in chn)
  54.             {
  55.                 if (!IsValidChar(c))
  56.                     return false;
  57.             }
  58.             return true;
  59.         }
  60.     }