通過漢字取得拼音Java版(轉)
現在想到的方法有兩種:1,取得的漢字拼音對照表,然後做成map.一個GB2312的對照表見這里:
http://zh.transwiki.org/wiki/index.php/GB2312%E6%B1%89%E5%AD%97%E6%8B%BC%E9%9F%B3%E5%AF%B9%E7%85%A7%E8%A1%A8
2,這個方法看起來好,效果一般;
??1
????private?static?int[]?pyvalue?=?new?int[]?
{?-20319,?-20317,?-20304,?-20295,
??2
????????????-20292,?-20283,?-20265,?-20257,?-20242,?-20230,?-20051,?-20036,
??3
????????????-20032,?-20026,?-20002,?-19990,?-19986,?-19982,?-19976,?-19805,
??4
????????????-19784,?-19775,?-19774,?-19763,?-19756,?-19751,?-19746,?-19741,
??5
????????????-19739,?-19728,?-19725,?-19715,?-19540,?-19531,?-19525,?-19515,
??6
????????????-19500,?-19484,?-19479,?-19467,?-19289,?-19288,?-19281,?-19275,
??7
????????????-19270,?-19263,?-19261,?-19249,?-19243,?-19242,?-19238,?-19235,
??8
????????????-19227,?-19224,?-19218,?-19212,?-19038,?-19023,?-19018,?-19006,
??9
????????????-19003,?-18996,?-18977,?-18961,?-18952,?-18783,?-18774,?-18773,
?10
????????????-18763,?-18756,?-18741,?-18735,?-18731,?-18722,?-18710,?-18697,
?11
????????????-18696,?-18526,?-18518,?-18501,?-18490,?-18478,?-18463,?-18448,
?12
????????????-18447,?-18446,?-18239,?-18237,?-18231,?-18220,?-18211,?-18201,
?13
????????????-18184,?-18183,?-18181,?-18012,?-17997,?-17988,?-17970,?-17964,
?14
????????????-17961,?-17950,?-17947,?-17931,?-17928,?-17922,?-17759,?-17752,
?15
????????????-17733,?-17730,?-17721,?-17703,?-17701,?-17697,?-17692,?-17683,
?16
????????????-17676,?-17496,?-17487,?-17482,?-17468,?-17454,?-17433,?-17427,
?17
????????????-17417,?-17202,?-17185,?-16983,?-16970,?-16942,?-16915,?-16733,
?18
????????????-16708,?-16706,?-16689,?-16664,?-16657,?-16647,?-16474,?-16470,
?19
????????????-16465,?-16459,?-16452,?-16448,?-16433,?-16429,?-16427,?-16423,
?20
????????????-16419,?-16412,?-16407,?-16403,?-16401,?-16393,?-16220,?-16216,
?21
????????????-16212,?-16205,?-16202,?-16187,?-16180,?-16171,?-16169,?-16158,
?22
????????????-16155,?-15959,?-15958,?-15944,?-15933,?-15920,?-15915,?-15903,
?23
????????????-15889,?-15878,?-15707,?-15701,?-15681,?-15667,?-15661,?-15659,
?24
????????????-15652,?-15640,?-15631,?-15625,?-15454,?-15448,?-15436,?-15435,
?25
????????????-15419,?-15416,?-15408,?-15394,?-15385,?-15377,?-15375,?-15369,
?26
????????????-15363,?-15362,?-15183,?-15180,?-15165,?-15158,?-15153,?-15150,
?27
????????????-15149,?-15144,?-15143,?-15141,?-15140,?-15139,?-15128,?-15121,
?28
????????????-15119,?-15117,?-15110,?-15109,?-14941,?-14937,?-14933,?-14930,
?29
????????????-14929,?-14928,?-14926,?-14922,?-14921,?-14914,?-14908,?-14902,
?30
????????????-14894,?-14889,?-14882,?-14873,?-14871,?-14857,?-14678,?-14674,
?31
????????????-14670,?-14668,?-14663,?-14654,?-14645,?-14630,?-14594,?-14429,
?32
????????????-14407,?-14399,?-14384,?-14379,?-14368,?-14355,?-14353,?-14345,
?33
????????????-14170,?-14159,?-14151,?-14149,?-14145,?-14140,?-14137,?-14135,
?34
????????????-14125,?-14123,?-14122,?-14112,?-14109,?-14099,?-14097,?-14094,
?35
????????????-14092,?-14090,?-14087,?-14083,?-13917,?-13914,?-13910,?-13907,
?36
????????????-13906,?-13905,?-13896,?-13894,?-13878,?-13870,?-13859,?-13847,
?37
????????????-13831,?-13658,?-13611,?-13601,?-13406,?-13404,?-13400,?-13398,
?38
????????????-13395,?-13391,?-13387,?-13383,?-13367,?-13359,?-13356,?-13343,
?39
????????????-13340,?-13329,?-13326,?-13318,?-13147,?-13138,?-13120,?-13107,
?40
????????????-13096,?-13095,?-13091,?-13076,?-13068,?-13063,?-13060,?-12888,
?41
????????????-12875,?-12871,?-12860,?-12858,?-12852,?-12849,?-12838,?-12831,
?42
????????????-12829,?-12812,?-12802,?-12607,?-12597,?-12594,?-12585,?-12556,
?43
????????????-12359,?-12346,?-12320,?-12300,?-12120,?-12099,?-12089,?-12074,
?44
????????????-12067,?-12058,?-12039,?-11867,?-11861,?-11847,?-11831,?-11798,
?45
????????????-11781,?-11604,?-11589,?-11536,?-11358,?-11340,?-11339,?-11324,
?46
????????????-11303,?-11097,?-11077,?-11067,?-11055,?-11052,?-11045,?-11041,
?47
????????????-11038,?-11024,?-11020,?-11019,?-11018,?-11014,?-10838,?-10832,
?48
????????????-10815,?-10800,?-10790,?-10780,?-10764,?-10587,?-10544,?-10533,
?49
????????????-10519,?-10331,?-10329,?-10328,?-10322,?-10315,?-10309,?-10307,
?50
????????????-10296,?-10281,?-10274,?-10270,?-10262,?-10260,?-10256,?-10254?};
?51
?52
????private?static?String[]?pystr?=?new?String[]?
{?"a",?"ai",?"an",?"ang",
?53
????????????"ao",?"ba",?"bai",?"ban",?"bang",?"bao",?"bei",?"ben",?"beng",
?54
????????????"bi",?"bian",?"biao",?"bie",?"bin",?"bing",?"bo",?"bu",?"ca",
?55
????????????"cai",?"can",?"cang",?"cao",?"ce",?"ceng",?"cha",?"chai",?"chan",
?56
????????????"chang",?"chao",?"che",?"chen",?"cheng",?"chi",?"chong",?"chou",
?57
????????????"chu",?"chuai",?"chuan",?"chuang",?"chui",?"chun",?"chuo",?"ci",
?58
????????????"cong",?"cou",?"cu",?"cuan",?"cui",?"cun",?"cuo",?"da",?"dai",
?59
????????????"dan",?"dang",?"dao",?"de",?"deng",?"di",?"dian",?"diao",?"die",
?60
????????????"ding",?"diu",?"dong",?"dou",?"du",?"duan",?"dui",?"dun",?"duo",
?61
????????????"e",?"en",?"er",?"fa",?"fan",?"fang",?"fei",?"fen",?"feng",?"fo",
?62
????????????"fou",?"fu",?"ga",?"gai",?"gan",?"gang",?"gao",?"ge",?"gei",?"gen",
?63
????????????"geng",?"gong",?"gou",?"gu",?"gua",?"guai",?"guan",?"guang",?"gui",
?64
????????????"gun",?"guo",?"ha",?"hai",?"han",?"hang",?"hao",?"he",?"hei",
?65
????????????"hen",?"heng",?"hong",?"hou",?"hu",?"hua",?"huai",?"huan",?"huang",
?66
????????????"hui",?"hun",?"huo",?"ji",?"jia",?"jian",?"jiang",?"jiao",?"jie",
?67
????????????"jin",?"jing",?"jiong",?"jiu",?"ju",?"juan",?"jue",?"jun",?"ka",
?68
????????????"kai",?"kan",?"kang",?"kao",?"ke",?"ken",?"keng",?"kong",?"kou",
?69
????????????"ku",?"kua",?"kuai",?"kuan",?"kuang",?"kui",?"kun",?"kuo",?"la",
?70
????????????"lai",?"lan",?"lang",?"lao",?"le",?"lei",?"leng",?"li",?"lia",
?71
????????????"lian",?"liang",?"liao",?"lie",?"lin",?"ling",?"liu",?"long",
?72
????????????"lou",?"lu",?"lv",?"luan",?"lue",?"lun",?"luo",?"ma",?"mai",?"man",
?73
????????????"mang",?"mao",?"me",?"mei",?"men",?"meng",?"mi",?"mian",?"miao",
?74
????????????"mie",?"min",?"ming",?"miu",?"mo",?"mou",?"mu",?"na",?"nai",?"nan",
?75
????????????"nang",?"nao",?"ne",?"nei",?"nen",?"neng",?"ni",?"nian",?"niang",
?76
????????????"niao",?"nie",?"nin",?"ning",?"niu",?"nong",?"nu",?"nv",?"nuan",
?77
????????????"nue",?"nuo",?"o",?"ou",?"pa",?"pai",?"pan",?"pang",?"pao",?"pei",
?78
????????????"pen",?"peng",?"pi",?"pian",?"piao",?"pie",?"pin",?"ping",?"po",
?79
????????????"pu",?"qi",?"qia",?"qian",?"qiang",?"qiao",?"qie",?"qin",?"qing",
?80
????????????"qiong",?"qiu",?"qu",?"quan",?"que",?"qun",?"ran",?"rang",?"rao",
?81
????????????"re",?"ren",?"reng",?"ri",?"rong",?"rou",?"ru",?"ruan",?"rui",
?82
????????????"run",?"ruo",?"sa",?"sai",?"san",?"sang",?"sao",?"se",?"sen",
?83
????????????"seng",?"sha",?"shai",?"shan",?"shang",?"shao",?"she",?"shen",
?84
????????????"sheng",?"shi",?"shou",?"shu",?"shua",?"shuai",?"shuan",?"shuang",
?85
????????????"shui",?"shun",?"shuo",?"si",?"song",?"sou",?"su",?"suan",?"sui",
?86
????????????"sun",?"suo",?"ta",?"tai",?"tan",?"tang",?"tao",?"te",?"teng",
?87
????????????"ti",?"tian",?"tiao",?"tie",?"ting",?"tong",?"tou",?"tu",?"tuan",
?88
????????????"tui",?"tun",?"tuo",?"wa",?"wai",?"wan",?"wang",?"wei",?"wen",
?89
????????????"weng",?"wo",?"wu",?"xi",?"xia",?"xian",?"xiang",?"xiao",?"xie",
?90
????????????"xin",?"xing",?"xiong",?"xiu",?"xu",?"xuan",?"xue",?"xun",?"ya",
?91
????????????"yan",?"yang",?"yao",?"ye",?"yi",?"yin",?"ying",?"yo",?"yong",
?92
????????????"you",?"yu",?"yuan",?"yue",?"yun",?"za",?"zai",?"zan",?"zang",
?93
????????????"zao",?"ze",?"zei",?"zen",?"zeng",?"zha",?"zhai",?"zhan",?"zhang",
?94
????????????"zhao",?"zhe",?"zhen",?"zheng",?"zhi",?"zhong",?"zhou",?"zhu",
?95
????????????"zhua",?"zhuai",?"zhuan",?"zhuang",?"zhui",?"zhun",?"zhuo",?"zi",
?96
????????????"zong",?"zou",?"zu",?"zuan",?"zui",?"zun",?"zuo"?};
?97
?98
????public?static?int?getChsAscii(String?chs)?
{
?99
????????int?asc?=?0;
100
????????try?
{
101
????????????byte[]?bytes?=?chs.getBytes("gb2312");
102
????????????if?(bytes?==?null?||?bytes.length?>?2?||?bytes.length?<=?0)?
{?//?錯誤
103
????????????????//?log
104
????????????????System.out.println("error");
105
????????????}
106
????????????if?(bytes.length?==?1)?
{?//?英文字符
107
????????????????asc?=?bytes[0];
108
????????????}
109
????????????if?(bytes.length?==?2)?
{?//?中文字符
110
????????????//?System.out.println(bytes[0]);
111
????????????//?System.out.println(bytes[1]);
112
????????????????int?hightByte?=?256?+?bytes[0];
113
????????????????int?lowByte?=?256?+?bytes[1];
114
????????????????asc?=?(256?*?hightByte?+?lowByte)?-?256?*?256;
115
????????????}
116
????????}?catch?(Exception?e)?
{
117
????????????e.printStackTrace();
118
????????}
119
????????return?asc;
120
????}
121
122
????public?static?String?convert(String?str)?
{
123
????????String?result?=?null;
124
????????int?ascii?=?getChsAscii(str);
125
//????????System.out.println(ascii);
126
????????if?(ascii?>?0?&&?ascii?<?160)?
{
127
????????????result?=?String.valueOf((char)?ascii);
128
????????}?else?
{
129
????????????for?(int?i?=?(pyvalue.length?-?1);?i?>=?0;?i--)?
{
130
????????????????if?(pyvalue[i]?<=?ascii)?
{
131
????????????????????result?=?pystr[i];
132
????????????????????break;
133
????????????????}
134
????????????}
135
????????}
136
????????return?result;
137
????}
138
????public?static?String?getPy1(String?chs)?
{
139
????????StringBuffer?py?=?new?StringBuffer();
140
????????String?key,?value;
141
????????for?(int?i?=?0;?i?<?chs.length();?i++)?
{
142
????????????key?=?chs.substring(i,?i?+?1);
143
????????????if?(key.getBytes().length?==?2)?
{
144
????????????????value?=?(String)?convert(key);
145
????????????????if?(value?==?null)?
{
146
????????????????????value?=?"unknown";
147
????????????????}
148
????????????}?else?
{
149
????????????????value?=?key;
150
????????????}
151
152
????????????py.append(value);
153
????????}
154
????????return?py.toString();
155
????}



??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

#?re: 通過漢字取得拼音Java版 2007-01-05 10:34 yerba
第二種方法,取不到一些特殊漢字,比如常用的"琪",就取成了“zuo”不知道是不是你得數據的問題。
另外,你的兩種方法都不能做到多音字的識別。要做到多音字的識別,我的方法是用微軟拼音輸入法字庫導出來,里面包括了所有的讀音。??回復??更多評論??
#?re: 通過漢字取得拼音Java版 2007-01-05 11:15 Ivan Chen
試試pinyin4j:http://pinyin4j.sf.net/
很不錯。??回復??更多評論??
#?re: 通過漢字取得拼音Java版 2007-01-05 12:22 junmy[匿名]
這里一個.net版本的
see: http://www.cnblogs.com/jillzhang/archive/2006/10/30/544596.html??回復??更多評論??
#?re: 通過漢字取得拼音Java版 2007-01-05 16:11 Alex
#?re: 通過漢字取得拼音Java版 2007-01-05 22:21 blackbat
第1種方法是不是全部漢字都可以去到???回復??更多評論??
#?re: 通過漢字取得拼音Java版 2007-01-07 14:52 slx
#?re: 通過漢字取得拼音Java版 2007-01-10 10:00 jyb
從微軟拼音中導出來的比較全,應該是gbk吧。對于多音字,我想還得看實際情況來處理,如果讓你把一個人的中文姓名、地名轉換為拼音,總不能把多音字的全部讀音對轉換過來吧。重慶--chongqing,重慶--chongzhongqing???回復??更多評論??
#?re: 通過漢字取得拼音Java版[未登錄]2007-01-19 10:08 Leon
posted on 2007-02-26 09:36 liaojiyong 閱讀(951) 評論(0) 編輯 收藏 所屬分類: Java