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 '*';
}
}
}