ConveterHelper.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. using System.Globalization;
  2. using System.Text;
  3. namespace Muchinfo.MTPClient.Service.Utilities
  4. {
  5. public class ConveterHelper
  6. {
  7. /// <summary>
  8. /// 转换汉字为拼音声母
  9. /// </summary>
  10. /// <param name="word">要转换的字符串</param>
  11. /// <returns>拼音声母</returns>
  12. public static string GetPinYinFromChsWord(string word)
  13. {
  14. StringBuilder spellBuilder = new StringBuilder();
  15. word = word.Replace(" ", string.Empty).Replace(" ", string.Empty);
  16. word = ToHalfAngle(word);
  17. //string shortname = "";
  18. //if (oWareName != null) shortname = GlobleFuction.ToDBC(oWareName.ToString().Trim().Replace(" ", "").Replace(" ", ""));
  19. //string shortspell = "";
  20. for (int ic = 0; ic < word.Length; ic++)
  21. {
  22. spellBuilder.Append(GetPinYinFromChsWord(word[ic]));
  23. }
  24. return spellBuilder.ToString();
  25. }
  26. /// <summary>
  27. /// 转半角的函数(DBC case)
  28. /// </summary>
  29. /// <param name="input">任意字符串</param>
  30. /// <returns>半角字符串</returns>
  31. ///<remarks>
  32. ///全角空格为12288,半角空格为32
  33. ///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
  34. ///</remarks>
  35. public static string ToHalfAngle(string input)
  36. {
  37. char[] c = input.ToCharArray();
  38. for (int i = 0; i < c.Length; i++)
  39. {
  40. c[i] = ToHalfAngle(c[i]);
  41. //if (c[i] == 12288)
  42. //{
  43. // c[i] = (char)32;
  44. // continue;
  45. //}
  46. //if (c[i] > 65280 && c[i] < 65375)
  47. // c[i] = (char)(c[i] - 65248);
  48. }
  49. return new string(c);
  50. }
  51. private static char ToHalfAngle(char input)
  52. {
  53. if (input == 12288)
  54. {
  55. input = (char)32;
  56. }
  57. if (input > 65280 && input < 65375)
  58. input = (char)(input - 65248);
  59. return input;
  60. }
  61. private static char GetPinYinFromChsWord(char c)
  62. {
  63. if ((int)c >= 33 && (int)c <= 126)
  64. return c;
  65. Encoding encoding = System.Text.Encoding.GetEncoding("gb2312");
  66. if (encoding == null)
  67. encoding = System.Text.Encoding.Default;
  68. byte[] array = encoding.GetBytes(c.ToString(CultureInfo.InvariantCulture));
  69. if (array.Length > 1)
  70. {
  71. int i = (short)(array[0] - '\0') * 256 + ((short)(array[1] - '\0'));
  72. //if (i < 0xB0A1) return "_";
  73. if (i < 0xB0C5) return 'a';
  74. if (i < 0xB2C1) return 'b';
  75. if (i < 0xB4EE) return 'c';
  76. if (i < 0xB6EA) return 'd';
  77. if (i < 0xB7A2) return 'e';
  78. if (i < 0xB8C1) return 'f';
  79. if (i < 0xB9FE) return 'g';
  80. if (i < 0xBBF7) return 'h';
  81. if (i < 0xBFA6) return 'j';
  82. if (i < 0xC0AC) return 'k';
  83. if (i < 0xC2E8) return 'l';
  84. if (i < 0xC4C3) return 'm';
  85. if (i < 0xC5B6) return 'n';
  86. if (i < 0xC5BE) return 'o';
  87. if (i < 0xC6DA) return 'p';
  88. if (i < 0xC8BB) return 'q';
  89. if (i < 0xC8F6) return 'r';
  90. if (i < 0xCBFA) return 's';
  91. if (i < 0xCDDA) return 't';
  92. if (i < 0xCEF4) return 'w';
  93. if (i < 0xD1B9) return 'x';
  94. if (i < 0xD4D1) return 'y';
  95. if (i < 0xD7FA) return 'z';
  96. }
  97. return '*';
  98. }
  99. }
  100. }