代码改变世界

c# 汉字转拼音

2015-11-05 17:00  alaric888  阅读(202)  评论(0编辑  收藏  举报
方法一: 

/// <summary>   
        /// 生成拼音简码   
        /// </summary>   
        /// <param name="unicodeString">Unicode编码字符串</param>   
        /// <returns>拼音简码:string</returns>   
        public static string GetPinyinCode(string unicodeString)   
        {   
            int i = 0;   
            ushort key = 0;   
            string strResult = string.Empty;            //创建两个不同的encoding对象   
            Encoding unicode = Encoding.Unicode;   
            //创建GBK码对象   
            Encoding gbk = Encoding.GetEncoding(936);   
            //将unicode字符串转换为字节   
            byte[] unicodeBytes = unicode.GetBytes(unicodeString);   
            //再转化为GBK码   
            byte[] gbkBytes = Encoding.Convert(unicode, gbk, unicodeBytes);   
            while (i < gbkBytes.Length)   
            {   
                //如果为数字\字母\其他ASCII符号   
                if (gbkBytes <= 127)   
                {   
                    strResult = strResult + (char)gbkBytes;   
                    i++;   
                }  
                #region 否则生成汉字拼音简码,取拼音首字母   
                else  
                {   
                    key = (ushort)(gbkBytes * 256 + gbkBytes[i + 1]);   
                    if (key >= '\uB0A1' && key <= '\uB0C4')   
                    {   
                        strResult = strResult + "A";   
                    }   
                    else if (key >= '\uB0C5' && key <= '\uB2C0')   
                    {   
                        strResult = strResult + "B";   
                    }   
                    else if (key >= '\uB2C1' && key <= '\uB4ED')   
                    {   
                        strResult = strResult + "C";   
                    }   
                    else if (key >= '\uB4EE' && key <= '\uB6E9')   
                    {   
                        strResult = strResult + "D";   
                    }   
                    else if (key >= '\uB6EA' && key <= '\uB7A1')   
                    {   
                        strResult = strResult + "E";   
                    }   
                    else if (key >= '\uB7A2' && key <= '\uB8C0')   
                    {   
                        strResult = strResult + "F";   
                    }   
                    else if (key >= '\uB8C1' && key <= '\uB9FD')   
                    {   
                        strResult = strResult + "G";   
                    }   
                    else if (key >= '\uB9FE' && key <= '\uBBF6')   
                    {   
                        strResult = strResult + "H";   
                    }   
                    else if (key >= '\uBBF7' && key <= '\uBFA5')   
                    {   
                        strResult = strResult + "J";   
                    }   
                    else if (key >= '\uBFA6' && key <= '\uC0AB')   
                    {   
                        strResult = strResult + "K";   
                    }   
                    else if (key >= '\uC0AC' && key <= '\uC2E7')   
                    {   
                        strResult = strResult + "L";   
                    }   
                    else if (key >= '\uC2E8' && key <= '\uC4C2')   
                    {   
                        strResult = strResult + "M";   
                    }   
                    else if (key >= '\uC4C3' && key <= '\uC5B5')   
                    {   
                        strResult = strResult + "N";   
                    }   
                    else if (key >= '\uC5B6' && key <= '\uC5BD')   
                    {   
                        strResult = strResult + "O";   
                    }   
                    else if (key >= '\uC5BE' && key <= '\uC6D9')   
                    {   
                        strResult = strResult + "P";   
                    }   
                    else if (key >= '\uC6DA' && key <= '\uC8BA')   
                    {   
                        strResult = strResult + "Q";   
                    }   
                    else if (key >= '\uC8BB' && key <= '\uC8F5')   
                    {   
                        strResult = strResult + "R";   
                    }   
                    else if (key >= '\uC8F6' && key <= '\uCBF9')   
                    {   
                        strResult = strResult + "S";   
                    }   
                    else if (key >= '\uCBFA' && key <= '\uCDD9')   
                    {   
                        strResult = strResult + "T";   
                    }   
                    else if (key >= '\uCDDA' && key <= '\uCEF3')   
                    {   
                        strResult = strResult + "W";   
                    }   
                    else if (key >= '\uCEF4' && key <= '\uD188')   
                    {   
                        strResult = strResult + "X";   
                    }   
                    else if (key >= '\uD1B9' && key <= '\uD4D0')   
                    {   
                        strResult = strResult + "Y";   
                    }   
                    else if (key >= '\uD4D1' && key <= '\uD7F9')   
                    {   
                        strResult = strResult + "Z";   
                    }   
                    else  
                    {   
                        strResult = strResult + "?";   
                    }   
                    i = i + 2;   
                }  
                #endregion   
            }//end while   
            return strResult;   
        }  


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


方法二: 

static public string GetChineseSpell(string strText)   
{   
int len = strText.Length;   
string myStr = "";   
for(int i=0;i<len;i++)   
{   
myStr += getSpell(strText.Substring(i,1));   
}   
return myStr;   
}   
  
static public string getSpell(string cnChar)   
{   
byte[] arrCN = Encoding.Default.GetBytes(cnChar);   
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)   
{   
return Encoding.Default.GetString(new byte[]{(byte)(65+i)});   
}   
}   
return "*";   
}   
else return cnChar;   
}  




//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////