此类可以实现的功能如下:
1、对中文字符串进行拼音转换的基本功能
2、支持并可自定义拼音单词间的分隔符
3、支持并可自定义是否将拼音单词首字母大写
4、支持并可自定义多音词预定音
5、支持并可自定义转换过程中要排除解析的字符,例如中文标点
1
/**//**//**//// <summary>
2
/// 汉字转拼音工具。
3
/// </summary>
4
public sealed class CHS2PinYin
5

{
6
/**//**/
7
/**//// <summary>
8
/// 包含字符 ASC 码的整形数组。
9
/// </summary>
10
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 };
11
12
/**//**/
13
/**//// <summary>
14
/// 包含汉字拼音的字符串数组。
15
/// </summary>
16
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" };
17
18
/**//**/
19
/**//// <summary>
20
/// 包含要排除处理的字符的字符串数组。
21
/// </summary>
22
private static string[] bd = new string[]
{ ",", "。", "“", "”", "‘", "’", "¥", "$", "(", "「", "『", ")", "」", "』", "[", "〖", "【", "]", "〗", "】", "—", "…", "《", "<", "》", ">" };
23
24
private static Hashtable _Phrase;
25
26
/**//**/
27
/**//// <summary>
28
/// 设置或获取包含列外词组读音的键/值对的组合。
29
/// </summary>
30
public static Hashtable Phrase
31
{
32
get
33
{
34
if (_Phrase == null)
35
{
36
_Phrase = new Hashtable();
37
38
_Phrase.Add("重庆", "Chong Qing");
39
_Phrase.Add("深圳", "Shen Zhen");
40
_Phrase.Add("什么", "Shen Me");
41
}
42
43
return _Phrase;
44
}
45
46
set
{ _Phrase = value; }
47
}
48
49
/**//**/
50
/**//// <summary>
51
/// 将指定中文字符串转换为拼音形式。
52
/// </summary>
53
/// <param name="chs">要转换的中文字符串。</param>
54
/// <param name="separator">连接拼音之间的分隔符。</param>
55
/// <param name="initialCap">指定是否将首字母大写。</param>
56
/// <returns>包含中文字符串的拼音的字符串。</returns>
57
public static string Convert(string chs, string separator, bool initialCap)
58
{
59
if (chs == null || chs.Length == 0) return "";
60
if (separator == null || separator.Length == 0) separator = "";
61
62
// 例外词组
63
foreach (DictionaryEntry de in CHS2PinYin.Phrase)
64
{
65
chs = chs.Replace(de.Key.ToString(), String.Format(" {0} ", de.Value.ToString().Replace(" ", separator)));
66
}
67
68
byte[] array = new byte[2];
69
string returnstr = "";
70
int chrasc = 0;
71
int i1 = 0;
72
int i2 = 0;
73
bool b = false;
74
char[] nowchar = chs.ToCharArray();
75
76
CultureInfo ci = Thread.CurrentThread.CurrentCulture;
77
TextInfo ti = ci.TextInfo;
78
79
for (int j = 0; j < nowchar.Length; j++)
80
{
81
array = Encoding.Default.GetBytes(nowchar[j].ToString());
82
string s = nowchar[j].ToString(); ;
83
84
if (array.Length == 1)
85
{
86
b = true;
87
returnstr += s;
88
}
89
else
90
{
91
if (s == "?")
92
{
93
if (returnstr == "" || b == true) returnstr += s;
94
else returnstr += separator + s;
95
96
continue;
97
}
98
99
i1 = (short)(array[0]);
100
i2 = (short)(array[1]);
101
102
chrasc = i1 * 256 + i2 - 65536;
103
104
for (int i = (pv.Length - 1); i >= 0; i--)
105
{
106
if (pv[i] <= chrasc)
107
{
108
s = ps[i];
109
110
if (initialCap == true) s = ti.ToTitleCase(s);
111
112
if (returnstr == "" || b == true) returnstr += s;
113
else returnstr += separator + s;
114
115
break;
116
}
117
}
118
119
b = false;
120
}
121
}
122
123
returnstr = returnstr.Replace(" ", separator);
124
return returnstr;
125
}
126
127
/**//**/
128
/**//// <summary>
129
/// 将指定中文字符串转换为拼音形式。
130
/// </summary>
131
/// <param name="chs">要转换的中文字符串。</param>
132
/// <param name="separator">连接拼音之间的分隔符。</param>
133
/// <returns>包含中文字符串的拼音的字符串。</returns>
134
public static string Convert(string chs, string separator)
135
{
136
return CHS2PinYin.Convert(chs, separator, false);
137
}
138
139
/**//**/
140
/**//// <summary>
141
/// 将指定中文字符串转换为拼音形式。
142
/// </summary>
143
/// <param name="chs">要转换的中文字符串。</param>
144
/// <param name="initialCap">指定是否将首字母大写。</param>
145
/// <returns>包含中文字符串的拼音的字符串。</returns>
146
public static string Convert(string chs, bool initialCap)
147
{
148
return CHS2PinYin.Convert(chs, "", initialCap);
149
}
150
151
/**//**/
152
/**//// <summary>
153
/// 将指定中文字符串转换为拼音形式。
154
/// </summary>
155
/// <param name="chs">要转换的中文字符串。</param>
156
/// <returns>包含中文字符串的拼音的字符串。</returns>
157
public static string Convert(string chs)
158
{
159
return CHS2PinYin.Convert(chs, "");
160
}
161
}
注:此代码是在网上找到,修改了几处错误 

2

3

4

5



6


7


8

9

10



11

12


13


14

15

16



17

18


19


20

21

22



23

24

25

26


27


28

29

30

31



32

33



34

35



36

37

38

39

40

41

42

43

44

45

46



47

48

49


50


51

52

53

54

55

56

57

58



59

60

61

62

63

64



65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80



81

82

83

84

85



86

87

88

89

90



91

92



93

94

95

96

97

98

99

100

101

102

103

104

105



106

107



108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127


128


129

130

131

132

133

134

135



136

137

138

139


140


141

142

143

144

145

146

147



148

149

150

151


152


153

154

155

156

157

158



159

160

161
