这个问题,我搜索了很多,发现有两个版本。但是一个太复杂了,一个我看得很好,可是不太好用,知道的帮忙看一下,或者提示一下如何实现,或者去哪里能够找得到。版本1:http://www.21tx.com/dev/2004/12/15/11576.html版本2:public class Classfun
    {
        private string Capstr;        public Classfun()
        {
            //
            // TODO: 在此处添加构造函数逻辑
            //
        }
        public string ChineseCap(string ChineseStr)
        {
            byte[] ZW = new byte[2];
            long ChineseStr_int;
            string CharStr, ChinaStr = "";
            for (int i = 0; i <= ChineseStr.Length - 1; i++)
            {
                CharStr = ChineseStr.Substring(i, 1).ToString();
                ZW = System.Text.Encoding.Default.GetBytes(CharStr);
                // 得到汉字符的字节数组
                if (ZW.Length == 2)
                {
                    int i1 = (short)(ZW[0]);
                    int i2 = (short)(ZW[1]);
                    ChineseStr_int = i1 * 256 + i2;
                    //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                    if ((ChineseStr_int >= 45217) && (ChineseStr_int <= 45252))
                    {
                        ChinaStr = "A";
                    }
                    else if ((ChineseStr_int >= 45253) && (ChineseStr_int <= 45760))
                    {
                        ChinaStr = "B";
                    }
                    else if ((ChineseStr_int >= 45761) && (ChineseStr_int <= 46317))
                    {
                        ChinaStr = "C";                    }
                    else if ((ChineseStr_int >= 46318) && (ChineseStr_int <= 46825))
                    {
                        ChinaStr = "D";
                    }
                    else if ((ChineseStr_int >= 46826) && (ChineseStr_int <= 47009))
                    {
                        ChinaStr = "E";
                    }
                    else if ((ChineseStr_int >= 47010) && (ChineseStr_int <= 47296))
                    {
                        ChinaStr = "F";
                    }
                    else if ((ChineseStr_int >= 47297) && (ChineseStr_int <= 47613))
                    {
                        ChinaStr = "G";
                    }
                    else if ((ChineseStr_int >= 47614) && (ChineseStr_int <= 48118))
                    {                        ChinaStr = "H";
                    }                    else if ((ChineseStr_int >= 48119) && (ChineseStr_int <= 49061))
                    {
                        ChinaStr = "J";
                    }
                    else if ((ChineseStr_int >= 49062) && (ChineseStr_int <= 49323))
                    {
                        ChinaStr = "K";
                    }
                    else if ((ChineseStr_int >= 49324) && (ChineseStr_int <= 49895))
                    {
                        ChinaStr = "L";
                    }
                    else if ((ChineseStr_int >= 49896) && (ChineseStr_int <= 50370))
                    {
                        ChinaStr = "M";
                    }                    else if ((ChineseStr_int >= 50371) && (ChineseStr_int <= 50613))
                    {
                        ChinaStr = "N";                    }
                    else if ((ChineseStr_int >= 50614) && (ChineseStr_int <= 50621))
                    {
                        ChinaStr = "O";
                    }
                    else if ((ChineseStr_int >= 50622) && (ChineseStr_int <= 50905))
                    {
                        ChinaStr = "P";                    }
                    else if ((ChineseStr_int >= 50906) && (ChineseStr_int <= 51386))
                    {
                        ChinaStr = "Q";                    }                    else if ((ChineseStr_int >= 51387) && (ChineseStr_int <= 51445))
                    {
                        ChinaStr = "R";
                    }
                    else if ((ChineseStr_int >= 51446) && (ChineseStr_int <= 52217))
                    {
                        ChinaStr = "S";
                    }
                    else if ((ChineseStr_int >= 52218) && (ChineseStr_int <= 52697))
                    {
                        ChinaStr = "T";
                    }
                    else if ((ChineseStr_int >= 52698) && (ChineseStr_int <= 52979))
                    {
                        ChinaStr = "W";
                    }
                    else if ((ChineseStr_int >= 52980) && (ChineseStr_int <= 53640))
                    {
                        ChinaStr = "X";
                    }
                    else if ((ChineseStr_int >= 53689) && (ChineseStr_int <= 54480))
                    {
                        ChinaStr = "Y";
                    }
                    else if ((ChineseStr_int >= 54481) && (ChineseStr_int <= 55289))
                    {
                        ChinaStr = "Z";
                    }
                }
                else
                {
                    Capstr = ChineseStr;
                    break;
                }                Capstr = Capstr + ChinaStr;
            }
            return Capstr;
        }
    }
}我个人比较喜欢版本2, 但是版本2特殊情况下,不好用。郁闷。

解决方案 »

  1.   

     public   string   GetPYString(string   str) 
            { 
                    string   tempStr   =   ""; 
                    foreach   (char   c   in   str) 
                    { 
                            if   ((int)c   > =   33   &&   (int)c   <=   126) 
                            {//字母和符号原样保留 
                                    tempStr   +=   c.ToString(); 
                            } 
                            else 
                            {//累加拼音声母 
                                    tempStr   +=   GetPYChar(c.ToString()); 
                            } 
                    } 
                    return   tempStr; 
            }         public   string   GetPYChar(string   c) 
            { 
                    byte[]   array   =   new   byte[2]; 
                    array   =   System.Text.Encoding.Default.GetBytes(c); 
                    int   i   =   (short)(array[0]   -   '\0')   *   256   +   ((short)(array[1]   -   '\0'));                 if   (i   <   0xB0A1)   return   "*"; 
                    if   (i   <   0xB0C5)   return   "a"; 
                    if   (i   <   0xB2C1)   return   "b"; 
                    if   (i   <   0xB4EE)   return   "c"; 
                    if   (i   <   0xB6EA)   return   "d"; 
                    if   (i   <   0xB7A2)   return   "e"; 
                    if   (i   <   0xB8C1)   return   "f"; 
                    if   (i   <   0xB9FE)   return   "g"; 
                    if   (i   <   0xBBF7)   return   "h"; 
                    if   (i   <   0xBFA6)   return   "g"; 
                    if   (i   <   0xC0AC)   return   "k"; 
                    if   (i   <   0xC2E8)   return   "l"; 
                    if   (i   <   0xC4C3)   return   "m"; 
                    if   (i   <   0xC5B6)   return   "n"; 
                    if   (i   <   0xC5BE)   return   "o"; 
                    if   (i   <   0xC6DA)   return   "p"; 
                    if   (i   <   0xC8BB)   return   "q"; 
                    if   (i   <   0xC8F6)   return   "r"; 
                    if   (i   <   0xCBFA)   return   "s"; 
                    if   (i   <   0xCDDA)   return   "t"; 
                    if   (i   <   0xCEF4)   return   "w"; 
                    if   (i   <   0xD1B9)   return   "x"; 
                    if   (i   <   0xD4D1)   return   "y"; 
                    if   (i   <   0xD7FA)   return   "z";                 return   "*"; 
            }
      

  2.   

    http://topic.csdn.net/u/20080121/11/dbd9422e-7b67-4d15-8d1e-29b5ed740a1e.html
      

  3.   

      public static 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;
        }我都是用这个,得到到一个 或者 一串字的 首字的缩写