1 public class ChineseHelper 2 { 3 4 #region 获取汉字字符串的首拼 5 /// <summary> 6 /// 在指定的字符串列表CnStr中检索符合拼音索引字符串 7 /// </summary> 8 /// <param name="CnStr">汉字字符串</param> 9 /// <returns>相对应的汉语拼音首字母串</returns> 10 public static string GetSpellCode(string CnStr) 11 { 12 string strTemp = ""; 13 int iLen = CnStr.Length; 14 int i = 0; 15 for (i = 0; i <= iLen - 1; i++) 16 { 17 strTemp += GetCharSpellCode(CnStr.Substring(i, 1)); 18 } 19 return strTemp; 20 } 21 22 /// <summary> 23 /// 得到一个汉字的拼音第一个字母,如果是一个英文字母则直接返回大写字母 24 /// </summary> 25 /// <param name="CnChar">单个汉字</param> 26 /// <returns>单个大写字母</returns> 27 private static string GetCharSpellCode(string CnChar) 28 { 29 long iCnChar; 30 byte[] ZW = System.Text.Encoding.Default.GetBytes(CnChar); 31 //如果是字母,则直接返回首字母 32 if (ZW.Length == 1) 33 { 34 return CommonMethod.CutString(CnChar.ToUpper(), 1); 35 } 36 else 37 { 38 // get the array of byte from the single char 39 int i1 = (short)(ZW[0]); 40 int i2 = (short)(ZW[1]); 41 iCnChar = i1 * 256 + i2; 42 } 43 // iCnChar match the constant 44 #region 45 if ((iCnChar >= 45217) && (iCnChar <= 45252)) 46 { 47 return "A"; 48 } 49 else if ((iCnChar >= 45253) && (iCnChar <= 45760)) 50 { 51 return "B"; 52 } 53 else if ((iCnChar >= 45761) && (iCnChar <= 46317)) 54 { 55 return "C"; 56 } 57 else if ((iCnChar >= 46318) && (iCnChar <= 46825)) 58 { 59 return "D"; 60 } 61 else if ((iCnChar >= 46826) && (iCnChar <= 47009)) 62 { 63 return "E"; 64 } 65 else if ((iCnChar >= 47010) && (iCnChar <= 47296)) 66 { 67 return "F"; 68 } 69 else if ((iCnChar >= 47297) && (iCnChar <= 47613)) 70 { 71 return "G"; 72 } 73 else if ((iCnChar >= 47614) && (iCnChar <= 48118)) 74 { 75 return "H"; 76 } 77 else if ((iCnChar >= 48119) && (iCnChar <= 49061)) 78 { 79 return "J"; 80 } 81 else if ((iCnChar >= 49062) && (iCnChar <= 49323)) 82 { 83 return "K"; 84 } 85 else if ((iCnChar >= 49324) && (iCnChar <= 49895)) 86 { 87 return "L"; 88 } 89 else if ((iCnChar >= 49896) && (iCnChar <= 50370)) 90 { 91 return "M"; 92 } 93 else if ((iCnChar >= 50371) && (iCnChar <= 50613)) 94 { 95 return "N"; 96 } 97 else if ((iCnChar >= 50614) && (iCnChar <= 50621)) 98 { 99 return "O"; 100 } 101 else if ((iCnChar >= 50622) && (iCnChar <= 50905)) 102 { 103 return "P"; 104 } 105 else if ((iCnChar >= 50906) && (iCnChar <= 51386)) 106 { 107 return "Q"; 108 } 109 else if ((iCnChar >= 51387) && (iCnChar <= 51445)) 110 { 111 return "R"; 112 } 113 else if ((iCnChar >= 51446) && (iCnChar <= 52217)) 114 { 115 return "S"; 116 } 117 else if ((iCnChar >= 52218) && (iCnChar <= 52697)) 118 { 119 return "T"; 120 } 121 else if ((iCnChar >= 52698) && (iCnChar <= 52979)) 122 { 123 return "W"; 124 } 125 else if ((iCnChar >= 52980) && (iCnChar <= 53640)) 126 { 127 return "X"; 128 } 129 else if ((iCnChar >= 53689) && (iCnChar <= 54480)) 130 { 131 return "Y"; 132 } 133 else if ((iCnChar >= 54481) && (iCnChar <= 55289)) 134 { 135 return "Z"; 136 } 137 else 138 return ("-"); 139 #endregion 140 } 141 142 #endregion 143 } 144 public class CommonMethod 145 { 146 #region 截取字符长度 static string CutString(string str, int len) 147 /// <summary> 148 /// 截取字符长度 149 /// </summary> 150 /// <param name="str">被截取的字符串</param> 151 /// <param name="len">所截取的长度</param> 152 /// <returns>子字符串</returns> 153 public static string CutString(string str, int len) 154 { 155 if (str == null || str.Length == 0 || len <= 0) 156 { 157 return string.Empty; 158 } 159 160 int l = str.Length; 161 162 163 #region 计算长度 164 int clen = 0; 165 while (clen < len && clen < l) 166 { 167 //每遇到一个中文,则将目标长度减一。 168 if ((int)str[clen] > 128) { len--; } 169 clen++; 170 } 171 #endregion 172 173 if (clen < l) 174 { 175 return str.Substring(0, clen) + "..."; 176 } 177 else 178 { 179 return str; 180 } 181 } 182 #endregion 183 }