当前位置: 首页 > 下载中心 > 汉字转拼音函数ASP+UTF-8下生成汉字拼音,并且识别多音字

汉字转拼音函数ASP+UTF-8下生成汉字拼音,并且识别多音字

更新时间:2010-5-22 19:39:35 下载次数:

点击下载汉字转拼音函数ASP+UTF-8下生成汉字拼音,并且识别多音字

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