Ejemplo n.º 1
0
        /// <summary>
        /// 汉字转换为拼音
        /// </summary>
        public static string ToPinYin(this string input)
        {
            if (string.IsNullOrWhiteSpace(input))
            {
                return(string.Empty);
            }

            input = input.Trim();
            var result = new StringBuilder();//使用StringBuilder优化字符串连接

            char[] arrChar = input.ToCharArray();

            for (int j = 0; j < arrChar.Length; j++)                           //遍历输入的字符
            {
                byte[] arr = Encoding.Default.GetBytes(arrChar[j].ToString()); //根据系统默认编码得到字节码

                if (arr.Length == 1)                                           //如果只有1字节说明该字符不是汉字,结束本次循环
                {
                    result.Append(arrChar[j].ToString());
                    continue;
                }

                int arr1     = arr[0];                      //取字节1
                int arr2     = arr[1];                      //取字节2
                int charCode = arr1 * 256 + arr2 - 65536;   //计算汉字的编码

                if (charCode > -10254 || charCode < -20319) //如果不在汉字编码范围内则不改变
                {
                    result.Append(arrChar[j]);
                }
                else
                {
                    //根据汉字编码范围查找对应的拼音并保存到结果中
                    //由于charCode的键不一定存在,所以要找比他更小的键上一个键
                    if (!CodeCollections.ContainsKey(charCode))
                    {
                        for (int i = charCode; i <= 0; --i)
                        {
                            if (CodeCollections.ContainsKey(i))
                            {
                                result.Append(CodeCollections[i]);
                                break;
                            }
                        }
                    }
                    else
                    {
                        result.Append(CodeCollections[charCode]);
                    }
                }
            }

            return(result.ToString());
        }
Ejemplo n.º 2
0
        ///   <summary>
        ///   汉字转拼音
        ///   </summary>
        ///   <param   name="txt"> 需要转换的汉字 </param>
        ///   <returns> 返回汉字对应的拼音 </returns>
        public static string ToPinYin(string txt)
        {
            txt = txt.Trim();
            byte[]        arr      = new byte[2];         //每个汉字为2字节
            StringBuilder result   = new StringBuilder(); //使用StringBuilder优化字符串连接
            int           charCode = 0;
            int           arr1     = 0;
            int           arr2     = 0;

            char[] arrChar = txt.ToCharArray();
            for (int j = 0; j < arrChar.Length; j++)                                //遍历输入的字符
            {
                arr = System.Text.Encoding.Default.GetBytes(arrChar[j].ToString()); //根据系统默认编码得到字节码
                if (arr.Length == 1)                                                //如果只有1字节说明该字符不是汉字,结束本次循环
                {
                    result.Append(arrChar[j].ToString());
                    continue;
                }
                arr1     = (short)(arr[0]);                 //取字节1
                arr2     = (short)(arr[1]);                 //取字节2
                charCode = arr1 * 256 + arr2 - 65536;       //计算汉字的编码

                if (charCode > -10254 || charCode < -20319) //如果不在汉字编码范围内则不改变
                {
                    result.Append(arrChar[j]);
                }
                else
                {
                    //根据汉字编码范围查找对应的拼音并保存到结果中
                    //由于charCode的键不一定存在,所以要找比他更小的键上一个键
                    if (!CodeCollections.ContainsKey(charCode))
                    {
                        for (int i = charCode; i <= 0; --i)
                        {
                            if (CodeCollections.ContainsKey(i))
                            {
                                result.Append(" " + CodeCollections[i] + " ");
                                break;
                            }
                        }
                    }
                    else
                    {
                        result.Append(" " + CodeCollections[charCode] + " ");
                    }
                }
            }
            return(result.ToString());
        }