最近開發一個類似於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;
- }
- }