zoukankan
html css js c++ java
繁体转简体转半角转拼音
Code
using
System;
using
System.Collections;
using
System.Globalization;
using
System.Text;
using
System.Threading;
using
Microsoft.VisualBasic;
namespace
pcmax
{
/**/
///
<summary>
///
汉字转拼音工具。
///
</summary>
public
sealed
class
CHS2PinYin
{
/**/
///
<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;
/**/
///
<summary>
///
设置或获取包含列外词组读音的键/值对的组合。
///
</summary>
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>
///
<param name="separator">
连接拼音之间的分隔符。
</param>
///
<param name="initialCap">
指定是否将首字母大写。
</param>
///
<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
CHS2PinYin.Phrase)
{
chs
=
chs.Replace(de.Key.ToString(), String.Format(
"
{0}
"
, de.Value.ToString().Replace(
"
"
, separator)));
}
//
先对字符做全角转半角
chs
=
ToDBC(chs);
chs
=
Microsoft.VisualBasic.Strings.StrConv(chs,Microsoft.VisualBasic.VbStrConv.SimplifiedChinese,
0
);
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>
///
<param name="separator">
连接拼音之间的分隔符。
</param>
///
<returns>
包含中文字符串的拼音的字符串。
</returns>
public
static
string
Convert(
string
chs,
string
separator)
{
return
CHS2PinYin.Convert(chs, separator,
false
);
}
/**/
///
<summary>
///
将指定中文字符串转换为拼音形式。
///
</summary>
///
<param name="chs">
要转换的中文字符串。
</param>
///
<param name="initialCap">
指定是否将首字母大写。
</param>
///
<returns>
包含中文字符串的拼音的字符串。
</returns>
public
static
string
Convert(
string
chs,
bool
initialCap)
{
return
CHS2PinYin.Convert(chs,
""
, initialCap);
}
/**/
///
<summary>
///
将指定中文字符串转换为拼音形式。
///
</summary>
///
<param name="chs">
要转换的中文字符串。
</param>
///
<returns>
包含中文字符串的拼音的字符串。
</returns>
public
static
string
Convert(
string
chs)
{
return
CHS2PinYin.Convert(chs,
""
);
}
/**/
///
<summary>
///
转全角的函数(SBC case)
///
</summary>
///
<param name="input">
任意字符串
</param>
///
<returns>
全角字符串
</returns>
///
<remarks>
///
全角空格为12288,半角空格为32
///
其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
///
</remarks>
public
static
string
ToSBC(
string
input)
{
//
半角转全角:
char
[] c
=
input.ToCharArray();
for
(
int
i
=
0
; i
<
c.Length; i
++
)
{
if
(c[i]
==
32
)
{
c[i]
=
(
char
)
12288
;
continue
;
}
if
(c[i]
<
127
)
c[i]
=
(
char
)(c[i]
+
65248
);
}
return
new
string
(c);
}
/**/
///
<summary>
///
转半角的函数(DBC case)
///
</summary>
///
<param name="input">
任意字符串
</param>
///
<returns>
半角字符串
</returns>
///
<remarks>
///
全角空格为12288,半角空格为32
///
其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
///
</remarks>
public
static
string
ToDBC(
string
input)
{
char
[] c
=
input.ToCharArray();
for
(
int
i
=
0
; i
<
c.Length; 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);
}
/**/
///
<summary>
///
转换为简体中文
///
</summary>
public
static
string
ToSChinese(
string
str)
{
return
Strings.StrConv(str, VbStrConv.SimplifiedChinese,
0
);
}
/**/
///
<summary>
///
转换为繁体中文
///
</summary>
public
static
string
ToTChinese(
string
str)
{
return
Strings.StrConv(str, VbStrConv.TraditionalChinese,
0
);
}
}
}
查看全文
相关阅读:
WPF入门教程系列六——布局介绍与Canvas(一)
WPF入门教程系列五——Window 介绍
WPF入门教程系列四——Dispatcher介绍
WPF入门教程系列三——Application介绍(续)
html5 标签
html5
sublime汉化教程
html5 文本格式化
主键和索引的区别
响应式布局的开发基础知识
原文地址:https://www.cnblogs.com/pcmax/p/1362931.html
最新文章
python模拟websocket握手过程中计算sec-websocket-accept
程序员必须知道的10大基础实用算法及其讲解
寻找最小(最大)的k个数
Counting Bits
C++ new 长度为0的数组
线粒体可以进行个体识别?
SNP命名
甲基化问题锦集
SNP(单核苷酸多态性)准确性的验证,你造吗?
SNP问题大集锦
热门文章
全基因组测序 从头测序(de novo sequencing) 重测序(re-sequencing)
单细胞测序
链特异性转录组测序
DNA甲基化检测服务
如何将代码通过vs2017加载到GitHub
WPF窗体的生命周期
C#方法的重写
C#继承的执行顺序
WPF入门教程系列八——布局之Grid与UniformGrid(三)
WPF入门教程系列七——布局之WrapPanel与StackPanel(二)
Copyright © 2011-2022 走看看