您的位置:首页 > 编程语言 > C#

C#获取汉字拼音(包含音调)

2013-08-28 14:23 736 查看
//首字母拼音
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());
}
}
return tempStr.ToUpper();
}

public static string GetPYChar(string c)
{
byte[] array = new byte[2];
if (c.Trim().Length <= 0)
{
return " ";
}
array = System.Text.Encoding.Default.GetBytes(c);
if (c.Trim().Length <= 0)
{
return "";
}
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 "*";
}

/// <summary>
/// 获取全拼
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static string GetPYAll(string str)
{
StringBuilder py = new StringBuilder();
foreach (char obj in str)
{
try
{
ChineseChar chineseChar = new ChineseChar(obj);
ReadOnlyCollection<string> pyColl = chineseChar.Pinyins;
//循环生成首字母的笛卡尔积,存储到临时拼音列表
foreach (var item in pyColl)
{
if (item != null)
{
py.Append(item.Remove(item.Length - 1, 1));
break;
}
}
}
catch//非汉字
{
py.Append(obj);
}
}

return py.ToString();
}
///每个汉子的音节都有
/// 汉字转化为拼音,Dictionary的key保存全拼,value存拼音首字母缩写[包含了多音字,因此显示名存在重复行]
/// </summary>
/// <param name="str">汉字</param>
/// <returns>Dictionary的key保存全拼,value存拼音首字母缩写</returns>
public Dictionary<string, string> GetPinyin(string str)
{
//str = "其大1a,@";
Dictionary<string, string> dPinYin = new Dictionary<string, string>();
Dictionary<string, string> dPinYinTemp = new Dictionary<string, string>();
string py;
List<string> lTemp = new List<string>();//临时拼音首字母列表,去除重复字母
foreach (char obj in str)
{
try
{
ChineseChar chineseChar = new ChineseChar(obj);
ReadOnlyCollection<string> pyColl = chineseChar.Pinyins;
lTemp.Clear();
dPinYinTemp.Clear();
//循环生成首字母的笛卡尔积,存储到临时拼音列表
foreach (var item in pyColl)
{
if (item != null)
{
//py = IsFirst ? py = item.Substring(0, 1) : item.Remove(item.Length - 1, 1);
py = item.Substring(0, 1);
if (!lTemp.Contains(py))
{
lTemp.Add(py);
if (dPinYin.Count == 0)
{
dPinYinTemp.Add(item.Remove(item.Length - 1, 1), py);
}
else
{
foreach (var d in dPinYin)
{
dPinYinTemp.Add(d.Key + py, d.Value + py.Substring(0, 1));
}
}
}
}
}
}
catch//非汉字
{
if (dPinYin.Count == 0)
{
dPinYinTemp.Add(obj.ToString(), obj.ToString());
}
else
{
dPinYinTemp.Clear();
foreach (var d in dPinYin)
{
dPinYinTemp.Add(d.Key + obj.ToString(), d.Value + obj.ToString());
}
}
}
//拷贝到返回列表
dPinYin.Clear();
dPinYin = new Dictionary<string, string>(dPinYinTemp);
}
return dPinYin;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: