用人在知道里面提問,如何用javascript程序把漢字轉換爲拼音的首字母,帖子地址是:http://zhidao.baidu.com/question/41377061.htmljavascript
我分析一下之後,寫了下面的把漢字轉換爲拼音的程序,可是帖子只要拼音的首字母,因此那裏只貼了一個更簡單化的版本。html
程序原理很簡單,網上能夠找到漢字拼音的數據字典,可是因爲你們都知道GB2312編碼裏面漢字是按拼音排序的,只要知道各個拼音爲首的漢字代碼,就能夠計算全部漢字的拼音代碼了。java
程序有一個關鍵,就是Javascript對漢字是自動使用unicode編碼,爲了獲取起GB2312的ASCII編碼值,我使用了VBSCRIPT來寫了兩個函數,在JAVASCRIPT程序裏面調用VBSCRIPT的函數實現代碼轉換。函數
完整程序以下(把如下代碼保存爲一個html文件用IE打開,在漢字欄裏面輸入內容,光標離開的時候拼音欄就會顯示相應的拼音):ui
<mce:script language="vbscript"><!-- function vbChr(c) vbChr = chr(c) end function function vbAsc(n) vbAsc = asc(n) end function // --></mce:script> <mce:script language=javascript><!-- var py1=new Array(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, 15667, 15661, 15659, 15652, 15681, 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, 14929, 14928, 14926, 14930, 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,0); var py2=new Array('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', 'luan', 'lue', 'lun', 'luo', 'lv', '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', 'nuan', 'nue', 'nuo', 'nv', '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',''); function getPinYin(index){ var i; if(index==0x1534) return 'yan'; if(index>0x4F5F||index<0x2807) return ''; i=0;while(py1[i]>=index)i++; return py2[i-1]; } function pinyin(s){ var i,s2=''; for (i=0;i<s.length;i++)s2+=getPinYin(0-vbAsc(s.charAt(i))); return s2; } // --></mce:script>
<form name=frm> 漢字:<input type=text name=s SIZE=120 onchange="javascript:document.frm.p.value=pinyin(this.value);"><BR> 拼音:<input type=text name=p SIZE=120 readonly> </form>