using System.Globalization; using System.Text; namespace Muchinfo.MTPClient.Service.Utilities { public class ConveterHelper { /// /// 转换汉字为拼音声母 /// /// 要转换的字符串 /// 拼音声母 public static string GetPinYinFromChsWord(string word) { StringBuilder spellBuilder = new StringBuilder(); word = word.Replace(" ", string.Empty).Replace(" ", string.Empty); word = ToHalfAngle(word); //string shortname = ""; //if (oWareName != null) shortname = GlobleFuction.ToDBC(oWareName.ToString().Trim().Replace(" ", "").Replace(" ", "")); //string shortspell = ""; for (int ic = 0; ic < word.Length; ic++) { spellBuilder.Append(GetPinYinFromChsWord(word[ic])); } return spellBuilder.ToString(); } /// /// 转半角的函数(DBC case) /// /// 任意字符串 /// 半角字符串 /// ///全角空格为12288,半角空格为32 ///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248 /// public static string ToHalfAngle(string input) { char[] c = input.ToCharArray(); for (int i = 0; i < c.Length; i++) { c[i] = ToHalfAngle(c[i]); //if (c[i] == 12288) //{ // c[i] = (char)32; // continue; //} //if (c[i] > 65280 && c[i] < 65375) // c[i] = (char)(c[i] - 65248); } return new string(c); } private static char ToHalfAngle(char input) { if (input == 12288) { input = (char)32; } if (input > 65280 && input < 65375) input = (char)(input - 65248); return input; } private static char GetPinYinFromChsWord(char c) { if ((int)c >= 33 && (int)c <= 126) return c; Encoding encoding = System.Text.Encoding.GetEncoding("gb2312"); if (encoding == null) encoding = System.Text.Encoding.Default; byte[] array = encoding.GetBytes(c.ToString(CultureInfo.InvariantCulture)); if (array.Length > 1) { 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 'j'; 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 '*'; } } }