一、汉字(中文)转拼音首字母
——上代码——
/// <summary>
/// 把汉字转换成拼音(全拼),如果非汉子,原样输出
/// </summary>
/// <param name="hzString">汉字字符串</param>
/// <returns>转换后的拼音(全拼)字符串</returns>
public static string GetAllPYLetters(string hzString)
{
// 匹配中文字符
Regex regex = new Regex("^[\u4e00-\u9fa5]$");
byte[] array = new byte[2];
string pyString = "";
int chrAsc = 0;
int i1 = 0;
int i2 = 0;
char[] noWChar = hzString.ToCharArray();
for (int j = 0; j < noWChar.Length; j++)
{
// 中文字符
if (regex.IsMatch(noWChar[j].ToString()))
{
array = System.Text.Encoding.Default.GetBytes(noWChar[j].ToString());
i1 = (short)(array[0]);
i2 = (short)(array[1]);
chrAsc = i1 * 256 + i2 - 65536;
if (chrAsc > 0 && chrAsc < 160)
{
pyString += noWChar[j];
}
else
{
// 修正部分文字
if (chrAsc == -9254) // 修正“圳”字
{
pyString += "Zhen";
}
else
{
for (int i = (pyValue.Length - 1); i >= 0; i--)
{
if (pyValue[i] <= chrAsc)
{
pyString += pyName[i];
break;
}
}
}
}
}
// 非中文字符
else
{
pyString += noWChar[j].ToString();
}
}
return pyString;
}
/// <summary>
/// 汉字转拼音缩写
/// </summary>
/// <param name="str">要转换的汉字字符串</param>
/// <returns>拼音缩写</returns>
public static string GetPYString(string str)
{
string tempStr = "";
foreach (char c in str)
{
if ((int)c >= 33 && (int)c <= 126)
{
//字母和符号原样保留
tempStr += c.ToString();
}
else
{
//累加拼音声母
tempStr += GetPYChar(c.ToString());
}
}
if (tempStr.Length>=20)
{
tempStr = tempStr.Substring(0, 20);
}
tempStr = TrimCharacter(tempStr);
return tempStr;
}
/// <summary>
/// 替换字符
/// </summary>
/// <param name="asString"></param>
/// <returns></returns>
public static string TrimCharacter(string asString)
{
string sResult = "";
string sCharacterRegx = "[^a-zA-Z0-9\u4E00-\u9FFF]";
Regex rgVal = new Regex(sCharacterRegx);
sResult = rgVal.Replace(asString, "");
return sResult;
}
/// <summary>
/// 取单个字符的拼音声母
/// </summary>
/// <param name="c">要转换的单个汉字</param>
/// <returns>拼音声母</returns>
private static string GetPYChar(string c)
{
var charStr = string.Empty;
if (c.Trim().Length == 0)
{
charStr="";
}
byte[] array = new byte[2];
array = System.Text.Encoding.Default.GetBytes(c);
if (array?.Length > 1)
{
int i = (short) (array[0] - '\0')*256 + ((short) (array[1] - '\0'));
switch (i)
{
case 0xB0A1:
charStr="*";
break;
case 0xB0C5:
charStr="a";
break;
case 0xB2C1:
charStr="b";
break;
case 0xB4EE:
charStr="c";
break;
case 0xB6EA:
charStr="d";
break;
case 0xB7A2:
charStr="e";
break;
case 0xB8C1:
charStr="f";
break;
case 0xB9FE:
charStr="g";
break;
case 0xBBF7:
charStr="h";
break;
case 0xBFA6:
charStr="j";
break;
case 0xC0AC:
charStr="k";
break;
case 0xC2E8:
charStr="l";
break;
case 0xC4C3:
charStr="m";
break;
case 0xC5B6:
charStr="n";
break;
case 0xC5BE:
charStr="o";
break;
case 0xC6DA:
charStr="p&