| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- using System.Globalization;
- using System.Text;
- namespace Muchinfo.MTPClient.Service.Utilities
- {
- public class ConveterHelper
- {
- /// <summary>
- /// 转换汉字为拼音声母
- /// </summary>
- /// <param name="word">要转换的字符串</param>
- /// <returns>拼音声母</returns>
- 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();
- }
- /// <summary>
- /// 转半角的函数(DBC case)
- /// </summary>
- /// <param name="input">任意字符串</param>
- /// <returns>半角字符串</returns>
- ///<remarks>
- ///全角空格为12288,半角空格为32
- ///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
- ///</remarks>
- 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 '*';
- }
- }
- }
|