C#汉字转拼音首字母

来源:互联网 发布:js向json对象添加元素 编辑:程序博客网 时间:2024/05/01 08:50
// <summary>        /// 得到汉字拼音首字母        /// </summary>        /// <param name="chineseStr"></param>        /// <returns></returns>        public static string HZToPYSimple(string chineseStr)        {            try            {                byte[] b = System.Text.UnicodeEncoding.Default.GetBytes(chineseStr);                string res = "";                for (int i = 0; i < b.Length; )                {                    if (i == b.Length - 1)                    {                        if (char.IsNumber((char)b[i]) || char.IsLetter((char)b[i]))                            res += (char)b[i++];                        else                        {                            i++;                            continue;                        }                    }                    else if (Convert.ToByte(b[i]) > 127)//汉字                    {                        string tmp = System.Text.UnicodeEncoding.Default.GetString(b, i, 2);                        tmp = HZToCode(tmp, "拼");                        if (tmp.Length > 0)                            res += tmp[0];                        i += 2;                    }                    else                    {                        if (char.IsNumber((char)b[i]) || char.IsLetter((char)b[i]))                            res += (char)b[i++];                        else                        {                            i++;                            continue;                        }                    }                }                return res.ToUpper();            }            catch (Exception ex)            {                throw new Exception("错误:", ex);            }        }


 /// <summary>        /// 转换        /// </summary>        /// <param name="chineseStr"></param>        /// <param name="?"></param>        /// <returns></returns>        public static string HZToCode(string chineseStr,)//typeStr是指拼音还是五笔码        {            try            {                string resultStr = "";                byte[] arrCN = Encoding.Default.GetBytes(chineseStr);                if (arrCN.Length > 1)                {                    int area = (short)arrCN[0];                    int pos = (short)arrCN[1];                    int code = (area << 8) + pos;                    int[] areacode = { 45217, 45253, 45761, 46318, 46826, 47010, 47297, 47614,                         48119, 48119, 49062, 49324, 49896, 50371, 50614, 50622, 50906, 51387,                         51446, 52218, 52698, 52698, 52698, 52980, 53689, 54481 };                    for (int i = 0; i < 26; i++)                    {                        int max = 55290;                        if (i != 25) max = areacode[i + 1];                        if (areacode[i] <= code && code < max)                        {                            resultStr = Encoding.Default.GetString(new byte[] { (byte)(65 + i) });                            break;                        }                    }                }                return resultStr;            }            catch (Exception ex)            {                throw new Exception("错误:", ex);            }        }