ASP+UTF-8下生成汉字拼音,并且识别多音字
汉字转拼音功能介绍
hanzi2pinyin.asp全部代码
<%
'---------------------------------------------------------------
' Hanzi2Pinyin 1.1.0
' Copyright (c) 2009-2010 K88.CN - Hanzi2Pinyin 版权所有。
' 说明: 汉字转换拼音函数 (多音字区分功能)
' 环境: ASP + UTF-8
' 作者: 刘松 (Web:http://www.k88.cn, QQ:276359669, MSN:cniir@hotmail.com)
'---------------------------------------------------------------
Function Hanzi2Pinyin(strHanzi)
''变量定义
Dim objConn
Dim chrHanzi
Dim strPinyin, strSql
Dim intHanziAsc, intHanziLen
Dim rsDuoyinzi
Dim i
Hanzi2Pinyin = "" '初始化
''是否含有转换字符
If strHanzi > "" Then
' 进行转换
''使用数据库字典
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Provider = Microsoft.Jet.OLEDB.4.0;Data Source = " & server.mappath("#pinyin.mdb") '汉字拼音对照数据库
intHanziLen = Len(strHanzi) '字符数
''单字循环转换
For i = 1 to intHanziLen
strPinyin = "" '拼音复位
chrHanzi = Mid(strHanzi, i, 1) '单字
intHanziAsc = Ascw(chrHanzi) '单字Unicode码位
''单字Unicode码位补码
If intHanziAsc < 0 Then
intHanziAsc = intHanziAsc + 65536
End If
''全角转半角字符
If intHanziAsc >= 65281 and intHanziAsc <= 65374 Then
intHanziAsc = intHanziAsc - 65248
End If
''全角转半角空格
If intHanziAsc = 12288 Then
intHanziAsc = 32
End If
''转换操作
Select Case intHanziAsc
' 常用汉字多音字
Case 20102,30528,20869,38463,25303,25170,34444,22561,36767,25153,20415,39584,21093,27850,34180,21340,21442,34255,24046,31109,39076,22066,31216,28548,21273,33261,20256,32496,25774,22823,24377,24471,30340,35843,37117,24230,22244,24694,32473,40863,21644,35977,36824,20250,31293,38477,35282,20389,21119,35299,34249,21170,39048,36228,22204,21345,22771,21549,28518,28889,20048,21202,20457,20603,38706,25419,33853,22475,33033,34067,27667,27852,31192,32554,27169,25705,23068,24324,21032,23631,36843,26420,28689,26333,26646,36426,22855,33640,24378,33540,20146,38592,22622,30465,20160,35782,35828,20282,20284,23487,25552,25299,31995,21523,21414,32420,24055,21066,26657,34892,30044,21693,27575,21505,25874,25321,26366,25166,36711,31896,25240,37325,23646,24162 '多音字
''多音字拼音辨别
If intHanziLen = 1 Then
' 单字多音字 = 默认拼音
Else
''多音字存在字串中
Select Case i
Case 1
' 第一字为多音字
strSql = "select top 1 Pinyin from Duoyinzis where Word = '" & chrHanzi & "' and RWords like '%" & Mid(strHanzi, i+1, 1) & "%'"
Case intHanziLen
' 最后一字为多音字
strSql = "select top 1 Pinyin from Duoyinzis where Word = '" & chrHanzi & "' and LWords like '%" & Mid(strHanzi, i-1, 1) & "%'"
Case Else
' 中间多音字
strSql = "select top 1 Pinyin from Duoyinzis where Word = '" & chrHanzi & "' and (LWords like '%" & Mid(strHanzi, i-1, 1) & "%' or RWords like '%" & Mid(strHanzi, i+1, 1) & "%')"
End Select
''多音字拼音查询
Set rsDuoyinzi = objConn.Execute(strSql)
If Not rsDuoyinzi.Eof Then
strPinyin = rsDuoyinzi(0)
Set rsDuoyinzi = Nothing
End If
End If
''未辨别多音字拼音
If strPinyin = "" Then
''特殊多音字拼音
Select Case intHanziAsc
Case 20102
' 了
strPinyin = "le"
Case 20869
' 内
strPinyin = "nei"
Case 30528
' 着
strPinyin = "zhe"
Case Else
' 多音字默认拼音查询
strPinyin = objConn.Execute("select top 1 Pinyin from Pinyins where Word >= '" & chrHanzi & "' order by Word asc")(0)
End Select
End If
Case Else
''字转拼音
' If intHanziAsc >= 32 and intHanziAsc <= 126 Then
' ''排除"*/:<>?\|
' Select Case intHanziAsc
' Case 34, 42, 47, 58, 60, 62, 63, 92, 124
' strPinyin = "-"
' Case Else
' strPinyin = chrHanzi
' End Select
If (intHanziAsc >= 48 and intHanziAsc <= 57) or (intHanziAsc >= 65 and intHanziAsc <= 90) or (intHanziAsc >= 97 and intHanziAsc <= 122) Then
''仅保留大小写字母及数字
strPinyin = CHrw(intHanziAsc)
ElseIf intHanziAsc >= 19968 and intHanziAsc <= 40869 Then
' 汉字33367个
strPinyin = objConn.Execute("select top 1 Pinyin from Pinyins where Word >= '" & chrHanzi & "' order by Word asc")(0)
Else
' 其他标点字符
strPinyin = "-"
End If
End Select
Hanzi2Pinyin = Hanzi2Pinyin & strPinyin
Next
objConn.Close
Set objConn = Nothing
End If
End Function
%>