关于xamarin汉字转换成拼音

c# 中关于汉字转换成拼音

现在虽然是xamarin.from 但是大多是代码还是c#的。在点击title排序时候发现汉字不能正确排序。最后我是把汉字取首字母排序的。

发现一篇很有用的文章:http://www.cnblogs.com/bomo/archive/2012/11/08/2760212.htm

以下是我自己根据需要记录的。看原博也可以呢。

下载 Visual Studio International Pack类库,该类库扩展了.NET Framework对全球化软件开发的支持

下载地址:http://www.microsoft.com/downloads/details.aspx?FamilyID=44cac7f0-633b-477d-aed2-99aee642fc10&DisplayLang=zh-cn

解压得到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中 使用这个我发现有些汉字是无法转换来的 例如【旻】字是没有的。如何解决呢!

 

posted @ 2017-08-28 14:21  懒猫口米  阅读(414)  评论(0编辑  收藏  举报