using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Threading;
using System.Globalization;
namespace PinYinTest
{
public class ZhuanHuanChengPinYin
{
/**/
/// <summary>
/// 包含字符 ASC 码的整形数组。
/// </summary>
private static int[] pv =
new int[] { -
20319, -
20317, -
20304, -
20295, -
20292, -
20283, -
20265, -
20257, -
20242, -
20230, -
20051, -
20036, -
20032, -
20026, -
20002, -
19990, -
19986, -
19982, -
19976, -
19805, -
19784, -
19775, -
19774, -
19763, -
19756, -
19751, -
19746, -
19741, -
19739, -
19728, -
19725, -
19715, -
19540, -
19531, -
19525, -
19515, -
19500, -
19484, -
19479, -
19467, -
19289, -
19288, -
19281, -
19275, -
19270, -
19263, -
19261, -
19249, -
19243, -
19242, -
19238, -
19235, -
19227, -
19224, -
19218, -
19212, -
19038, -
19023, -
19018, -
19006, -
19003, -
18996, -
18977, -
18961, -
18952, -
18783, -
18774, -
18773, -
18763, -
18756, -
18741, -
18735, -
18731, -
18722, -
18710, -
18697, -
18696, -
18526, -
18518, -
18501, -
18490, -
18478, -
18463, -
18448, -
18447, -
18446, -
18239, -
18237, -
18231, -
18220, -
18211, -
18201, -
18184, -
18183, -
18181, -
18012, -
17997, -
17988, -
17970, -
17964, -
17961, -
17950, -
17947, -
17931, -
17928, -
17922, -
17759, -
17752, -
17733, -
17730, -
17721, -
17703, -
17701, -
17697, -
17692, -
17683, -
17676, -
17496, -
17487, -
17482, -
17468, -
17454, -
17433, -
17427, -
17417, -
17202, -
17185, -
16983, -
16970, -
16942, -
16915, -
16733, -
16708, -
16706, -
16689, -
16664, -
16657, -
16647, -
16474, -
16470, -
16465, -
16459, -
16452, -
16448, -
16433, -
16429, -
16427, -
16423, -
16419, -
16412, -
16407, -
16403, -
16401, -
16393, -
16220, -
16216, -
16212, -
16205, -
16202, -
16187, -
16180, -
16171, -
16169, -
16158, -
16155, -
15959, -
15958, -
15944, -
15933, -
15920, -
15915, -
15903, -
15889, -
15878, -
15707, -
15701, -
15681, -
15667, -
15661, -
15659, -
15652, -
15640, -
15631, -
15625, -
15454, -
15448, -
15436, -
15435, -
15419, -
15416, -
15408, -
15394, -
15385, -
15377, -
15375, -
15369, -
15363, -
15362, -
15183, -
15180, -
15165, -
15158, -
15153, -
15150, -
15149, -
15144, -
15143, -
15141, -
15140, -
15139, -
15128, -
15121, -
15119, -
15117, -
15110, -
15109, -
14941, -
14937, -
14933, -
14930, -
14929, -
14928, -
14926, -
14922, -
14921, -
14914, -
14908, -
14902, -
14894, -
14889, -
14882, -
14873, -
14871, -
14857, -
14678, -
14674, -
14670, -
14668, -
14663, -
14654, -
14645, -
14630, -
14594, -
14429, -
14407, -
14399, -
14384, -
14379, -
14368, -
14355, -
14353, -
14345, -
14170, -
14159, -
14151, -
14149, -
14145, -
14140, -
14137, -
14135, -
14125, -
14123, -
14122, -
14112, -
14109, -
14099, -
14097, -
14094, -
14092, -
14090, -
14087, -
14083, -
13917, -
13914, -
13910, -
13907, -
13906, -
13905, -
13896, -
13894, -
13878, -
13870, -
13859, -
13847, -
13831, -
13658, -
13611, -
13601, -
13406, -
13404, -
13400, -
13398, -
13395, -
13391, -
13387, -
13383, -
13367, -
13359, -
13356, -
13343, -
13340, -
13329, -
13326, -
13318, -
13147, -
13138, -
13120, -
13107, -
13096, -
13095, -
13091, -
13076, -
13068, -
13063, -
13060, -
12888, -
12875, -
12871, -
12860, -
12858, -
12852, -
12849, -
12838, -
12831, -
12829, -
12812, -
12802, -
12607, -
12597, -
12594, -
12585, -
12556, -
12359, -
12346, -
12320, -
12300, -
12120, -
12099, -
12089, -
12074, -
12067, -
12058, -
12039, -
11867, -
11861, -
11847, -
11831, -
11798, -
11781, -
11604, -
11589, -
11536, -
11358, -
11340, -
11339, -
11324, -
11303, -
11097, -
11077, -
11067, -
11055, -
11052, -
11045, -
11041, -
11038, -
11024, -
11020, -
11019, -
11018, -
11014, -
10838, -
10832, -
10815, -
10800, -
10790, -
10780, -
10764, -
10587, -
10544, -
10533, -
10519, -
10331, -
10329, -
10328, -
10322, -
10315, -
10309, -
10307, -
10296, -
10281, -
10274, -
10270, -
10262, -
10260, -
10256, -
10254 };
/**/
/// <summary>
/// 包含汉字拼音的字符串数组。
/// </summary>
private static string[] ps =
new string[] {
"a",
"ai",
"an",
"ang",
"ao",
"ba",
"bai",
"ban",
"bang",
"bao",
"bei",
"ben",
"beng",
"bi",
"bian",
"biao",
"bie",
"bin",
"bing",
"bo",
"bu",
"ca",
"cai",
"can",
"cang",
"cao",
"ce",
"ceng",
"cha",
"chai",
"chan",
"chang",
"chao",
"che",
"chen",
"cheng",
"chi",
"chong",
"chou",
"chu",
"chuai",
"chuan",
"chuang",
"chui",
"chun",
"chuo",
"ci",
"cong",
"cou",
"cu",
"cuan",
"cui",
"cun",
"cuo",
"da",
"dai",
"dan",
"dang",
"dao",
"de",
"deng",
"di",
"dian",
"diao",
"die",
"ding",
"diu",
"dong",
"dou",
"du",
"duan",
"dui",
"dun",
"duo",
"e",
"en",
"er",
"fa",
"fan",
"fang",
"fei",
"fen",
"feng",
"fo",
"fou",
"fu",
"ga",
"gai",
"gan",
"gang",
"gao",
"ge",
"gei",
"gen",
"geng",
"gong",
"gou",
"gu",
"gua",
"guai",
"guan",
"guang",
"gui",
"gun",
"guo",
"ha",
"hai",
"han",
"hang",
"hao",
"he",
"hei",
"hen",
"heng",
"hong",
"hou",
"hu",
"hua",
"huai",
"huan",
"huang",
"hui",
"hun",
"huo",
"ji",
"jia",
"jian",
"jiang",
"jiao",
"jie",
"jin",
"jing",
"jiong",
"jiu",
"ju",
"juan",
"jue",
"jun",
"ka",
"kai",
"kan",
"kang",
"kao",
"ke",
"ken",
"keng",
"kong",
"kou",
"ku",
"kua",
"kuai",
"kuan",
"kuang",
"kui",
"kun",
"kuo",
"la",
"lai",
"lan",
"lang",
"lao",
"le",
"lei",
"leng",
"li",
"lia",
"lian",
"liang",
"liao",
"lie",
"lin",
"ling",
"liu",
"long",
"lou",
"lu",
"lv",
"luan",
"lue",
"lun",
"luo",
"ma",
"mai",
"man",
"mang",
"mao",
"me",
"mei",
"men",
"meng",
"mi",
"mian",
"miao",
"mie",
"min",
"ming",
"miu",
"mo",
"mou",
"mu",
"na",
"nai",
"nan",
"nang",
"nao",
"ne",
"nei",
"nen",
"neng",
"ni",
"nian",
"niang",
"niao",
"nie",
"nin",
"ning",
"niu",
"nong",
"nu",
"nv",
"nuan",
"nue",
"nuo",
"o",
"ou",
"pa",
"pai",
"pan",
"pang",
"pao",
"pei",
"pen",
"peng",
"pi",
"pian",
"piao",
"pie",
"pin",
"ping",
"po",
"pu",
"qi",
"qia",
"qian",
"qiang",
"qiao",
"qie",
"qin",
"qing",
"qiong",
"qiu",
"qu",
"quan",
"que",
"qun",
"ran",
"rang",
"rao",
"re",
"ren",
"reng",
"ri",
"rong",
"rou",
"ru",
"ruan",
"rui",
"run",
"ruo",
"sa",
"sai",
"san",
"sang",
"sao",
"se",
"sen",
"seng",
"sha",
"shai",
"shan",
"shang",
"shao",
"she",
"shen",
"sheng",
"shi",
"shou",
"shu",
"shua",
"shuai",
"shuan",
"shuang",
"shui",
"shun",
"shuo",
"si",
"song",
"sou",
"su",
"suan",
"sui",
"sun",
"suo",
"ta",
"tai",
"tan",
"tang",
"tao",
"te",
"teng",
"ti",
"tian",
"tiao",
"tie",
"ting",
"tong",
"tou",
"tu",
"tuan",
"tui",
"tun",
"tuo",
"wa",
"wai",
"wan",
"wang",
"wei",
"wen",
"weng",
"wo",
"wu",
"xi",
"xia",
"xian",
"xiang",
"xiao",
"xie",
"xin",
"xing",
"xiong",
"xiu",
"xu",
"xuan",
"xue",
"xun",
"ya",
"yan",
"yang",
"yao",
"ye",
"yi",
"yin",
"ying",
"yo",
"yong",
"you",
"yu",
"yuan",
"yue",
"yun",
"za",
"zai",
"zan",
"zang",
"zao",
"ze",
"zei",
"zen",
"zeng",
"zha",
"zhai",
"zhan",
"zhang",
"zhao",
"zhe",
"zhen",
"zheng",
"zhi",
"zhong",
"zhou",
"zhu",
"zhua",
"zhuai",
"zhuan",
"zhuang",
"zhui",
"zhun",
"zhuo",
"zi",
"zong",
"zou",
"zu",
"zuan",
"zui",
"zun",
"zuo" };
/**/
/// <summary>
/// 包含要排除处理的字符的字符串数组。
/// </summary>
private static string[] bd =
new string[] {
",",
"。",
"“",
"”",
"‘",
"’",
"¥",
"$",
"(",
"「",
"『",
")",
"」",
"』",
"[",
"〖",
"【",
"]",
"〗",
"】",
"—",
"…",
"《",
"<",
"》",
">" };
private static Hashtable _Phrase;
public static Hashtable Phrase
{
get
{
if (_Phrase ==
null)
{
_Phrase =
new Hashtable();
_Phrase.Add("重庆",
"Chong Qing");
_Phrase.Add("深圳",
"Shen Zhen");
_Phrase.Add("什么",
"Shen Me");
}
return _Phrase;
}
set
{ _Phrase =
value; }
}
/**/
/// <summary>
/// 将指定中文字符串转换为拼音形式。
/// </summary>
/// <param name="chs">要转换的中文字符串。
/// <param name="separator">连接拼音之间的分隔符。
/// <param name="initialCap">指定是否将首字母大写。
/// <returns>包含中文字符串的拼音的字符串。</returns>
public static string Convert(
string chs,
string separator,
bool initialCap)
{
if (chs ==
null || chs.Length ==
0)
return "";
if (separator ==
null || separator.Length ==
0) separator =
"";
// 例外词组
foreach (DictionaryEntry de
in ZhuanHuanChengPinYin.Phrase)
{
chs = chs.Replace(de.Key.ToString(), String.Format(
" {0} ", de.Value.ToString().Replace(
" ", separator)));
}
byte[] array =
new byte[
2];
string returnstr =
"";
int chrasc =
0;
int i1 =
0;
int i2 =
0;
bool b =
false;
char[] nowchar =
chs.ToCharArray();
CultureInfo ci =
Thread.CurrentThread.CurrentCulture;
TextInfo ti =
ci.TextInfo;
for (
int j =
0; j < nowchar.Length; j++
)
{
array =
Encoding.Default.GetBytes(nowchar[j].ToString());
string s =
nowchar[j].ToString(); ;
if (array.Length ==
1)
{
b =
true;
returnstr +=
s;
}
else
{
if (s ==
"?")
{
if (returnstr ==
"" || b ==
true) returnstr +=
s;
else returnstr += separator +
s;
continue;
}
i1 = (
short)(array[
0]);
i2 = (
short)(array[
1]);
chrasc = i1 *
256 + i2 -
65536;
for (
int i = (pv.Length -
1); i >=
0; i--
)
{
if (pv[i] <=
chrasc)
{
s =
ps[i];
if (initialCap ==
true) s =
ti.ToTitleCase(s);
if (returnstr ==
"" || b ==
true) returnstr +=
s;
else returnstr += separator +
s;
break;
}
}
b =
false;
}
}
returnstr = returnstr.Replace(
" ", separator);
return returnstr;
}
/**/
/// <summary>
/// 将指定中文字符串转换为拼音形式。
/// </summary>
/// <param name="chs">要转换的中文字符串。
/// <param name="separator">连接拼音之间的分隔符。
/// <returns>包含中文字符串的拼音的字符串。</returns>
public static string Convert(
string chs,
string separator)
{
return Convert(chs, separator,
false);
}
/**/
/// <summary>
/// 将指定中文字符串转换为拼音形式。
/// </summary>
/// <param name="chs">要转换的中文字符串。
/// <param name="initialCap">指定是否将首字母大写。
/// <returns>包含中文字符串的拼音的字符串。</returns>
public static string Convert(
string chs,
bool initialCap)
{
return Convert(chs,
"", initialCap);
}
/**/
/// <summary>
/// 将指定中文字符串转换为拼音形式。
/// </summary>
/// <param name="chs">要转换的中文字符串。
/// <returns>包含中文字符串的拼音的字符串。</returns>
public static string Convert(
string chs)
{
return Convert(chs,
"");
}
}
}
转载于:https://www.cnblogs.com/zoro-zero/p/4110986.html
相关资源:ChnCharInfo.dll C#汉字转换为拼音的完美实现