关于xamarin汉字转换成拼音
c# 中关于汉字转换成拼音
现在虽然是xamarin.from 但是大多是代码还是c#的。在点击title排序时候发现汉字不能正确排序。最后我是把汉字取首字母排序的。
发现一篇很有用的文章:http://www.cnblogs.com/bomo/archive/2012/11/08/2760212.htm
以下是我自己根据需要记录的。看原博也可以呢。
下载 Visual Studio International Pack类库,该类库扩展了.NET Framework对全球化软件开发的支持
解压得到CHSPinYinConv.msi(拼音类库) 和 CHSPinYinConv.msi(简繁体类),安装(记住安装路径)
在项目中添加引用,把ChnCharInfo.dll 引入进来
- 以下是我自己在xamarin.Android使用到的代码
private string ToPinyin(string hanzi) { char[] ch = hanzi.ToArray(); string pinyinStr = ""; string strRetWord = ""; foreach (char c in ch) { if (ChineseChar.IsValidChar(c)) { ChineseChar chineseChar = new ChineseChar(c); ReadOnlyCollection<string> pinyin = chineseChar.Pinyins; pinyinStr = (pinyin[0].Substring(0, pinyin[0].Length - 1)); if(pinyinStr != null&& pinyinStr != "") { Console.Write(pinyinStr + '\n'); strRetWord = strRetWord + pinyinStr.Substring(0, 1); } } else { strRetWord += c.ToString(); } } return strRetWord; }
- 以下是我自己在xamarin.UWP使用到的代码
在uwp中我发现ChineseChar 是没有的 我换了另一种方法
/// <summary> /// 拆分姓名 /// </summary> /// <param name="CnChar">姓名</param> /// <returns>整个姓名拼音字母缩写</returns> private static string MainWord(string gown) { string strRetWord = ""; for (int i = 0; i < gown.Length; i++) { string strWord = gown[i] + ""; strRetWord = strRetWord + GetCharSpellCode(strWord); } return strRetWord; } /// <summary> /// 得到一个汉字的拼音第一个字母,如果是一个英文字母则直接返回大写字母 /// </summary> /// <param name="CnChar">单个汉字</param> /// <returns>单个大写字母</returns> private static string GetCharSpellCode(string cnChar) { long iCnChar; byte[] ZW = DBCSEncoding.GetDBCSEncoding("gb2312").GetBytes(cnChar); //如果是字母,则直接返回 if (ZW.Length == 1) { return cnChar.ToUpper(); } else { // get the array of byte from the single char int i1 = (short)(ZW[0]); int i2 = (short)(ZW[1]); iCnChar = i1 * 256 + i2; } //expresstion //table of the constant list // 'A'; //45217..45252 // 'B'; //45253..45760 // 'C'; //45761..46317 // 'D'; //46318..46825 // 'E'; //46826..47009 // 'F'; //47010..47296 // 'G'; //47297..47613 // 'H'; //47614..48118 // 'J'; //48119..49061 // 'K'; //49062..49323 // 'L'; //49324..49895 // 'M'; //49896..50370 // 'N'; //50371..50613 // 'O'; //50614..50621 // 'P'; //50622..50905 // 'Q'; //50906..51386 // 'R'; //51387..51445 // 'S'; //51446..52217 // 'T'; //52218..52697 //没有U,V // 'W'; //52698..52979 // 'X'; //52980..53640 // 'Y'; //53689..54480 // 'Z'; //54481..55289 // iCnChar match the constant if ((iCnChar >= 45217) && (iCnChar <= 45252)) { return "A"; } else if ((iCnChar >= 45253) && (iCnChar <= 45760)) { return "B"; } else if ((iCnChar >= 45761) && (iCnChar <= 46317)) { return "C"; } else if ((iCnChar >= 46318) && (iCnChar <= 46825)) { return "D"; } else if ((iCnChar >= 46826) && (iCnChar <= 47009)) { return "E"; } else if ((iCnChar >= 47010) && (iCnChar <= 47296)) { return "F"; } else if ((iCnChar >= 47297) && (iCnChar <= 47613)) { return "G"; } else if ((iCnChar >= 47614) && (iCnChar <= 48118)) { return "H"; } else if ((iCnChar >= 48119) && (iCnChar <= 49061)) { return "J"; } else if ((iCnChar >= 49062) && (iCnChar <= 49323)) { return "K"; } else if ((iCnChar >= 49324) && (iCnChar <= 49895)) { return "L"; } else if ((iCnChar >= 49896) && (iCnChar <= 50370)) { return "M"; } else if ((iCnChar >= 50371) && (iCnChar <= 50613)) { return "N"; } else if ((iCnChar >= 50614) && (iCnChar <= 50621)) { return "O"; } else if ((iCnChar >= 50622) && (iCnChar <= 50905)) { return "P"; } else if ((iCnChar >= 50906) && (iCnChar <= 51386)) { return "Q"; } else if ((iCnChar >= 51387) && (iCnChar <= 51445)) { return "R"; } else if ((iCnChar >= 51446) && (iCnChar <= 52217)) { return "S"; } else if ((iCnChar >= 52218) && (iCnChar <= 52697)) { return "T"; } else if ((iCnChar >= 52698) && (iCnChar <= 52979)) { return "W"; } else if ((iCnChar >= 52980) && (iCnChar <= 53640)) { return "X"; } else if ((iCnChar >= 53689) && (iCnChar <= 54480)) { return "Y"; } else if ((iCnChar >= 54481) && (iCnChar <= 55289)) { return "Z"; } else return ("?"); }
但是在uwp中 使用这个我发现有些汉字是无法转换来的 例如【旻】字是没有的。如何解决呢!