Unicode编解码函数

在用XMLHTTP进行远程数据传输的时候,如果涉及到不同编码,比如从oblog向我的博客发送一个trackback ping,数据中包含的中文字符就会出现乱码。

为了解决这个问题,可以在发送之前,把所有的数据中的中文都进行Unicode编码然后再传输。这样就可以顺利解决问题。

但是有时候还会涉及到另外一个问题,就是到了目标程序后,要进行数据库检索,发送过来的中文字符串都已经编码为类似 &#32462 这样的Unicode编码,而数据库中的数据虽然以unicode编码保存,但是却还是中文字符,并没有表示为 &#32462 这样的形式。这就导致检索失败。

为了解决这样的问题,我只好采取这样的办法:发送端对中文字符串进行Unicode编码,接受端接收后进行Unicode解码,还原为中文字符。

这两个函数如下:

'**************************************************
'函数名:AnsiToUnicode
'作  用:转换为 Unicode 编码
'参  数:str —- 要转换的字符
'返回值:转换后的字符
'Author:nt2003
'**************************************************
Public Function AnsiToUnicode(ByVal str)
    Dim i, j, c, i1, i2, u, fs, f, p
    AnsiToUnicode = ""
    p = ""
    For i = 1 To Len(str)
        c = Mid(str, i, 1)
        j = AscW(c)
        If j < 0 Then
            j = j + 65536
        End If
        If j >= 0 And j <= 128 Then
            If p = "c" Then
                AnsiToUnicode = " " & AnsiToUnicode
                p = "e"
            End If
            AnsiToUnicode = AnsiToUnicode & c
        Else
            If p = "e" Then
                AnsiToUnicode = AnsiToUnicode & " "
                p = "c"
            End If
            AnsiToUnicode = AnsiToUnicode & ("&#" & j & ";")
        End If
    Next
End Function
'**************************************************
'函数名:AnsiToUnicode
'作  用:转换为 Unicode 编码
'参  数:str —- 要转换的字符
'返回值:转换后的字符
'**************************************************
Function UnicodeToAnsi(ByVal str)
    If IsNull(str) or str = "" Then
        UnicodeToAnsi = ""
        Exit Function
    End If
    Dim reg,strMatch,strTemp,arrMatches
    strTemp = str
    Set reg = New RegExp
    reg.IgnoreCase = True
    reg.Global = False
    reg.Pattern = "&#(d*);"
    Set arrMatches = reg.Execute(str)
    For Each strMatch In arrMatches
        str = Replace(str,strMatch.Value,chrW(strMatch.SubMatches(0)))
    Next
    set reg=Nothing
    UnicodeToAnsi = str
End Function

本条目发布于。属于所谓技术分类。
               

Unicode编解码函数》上有2条评论

  1. 小李刀刀 文章作者

    [quote=nt2003]没有必要,用XMLDOM处理一下接受到的数据,中文的编码自然就正确了[/quote]

    嗯,不过不是所有的XMLHttp应用都采用了XMLDOM方式来处理数据。博客的Trackback Ping就还是用的post方式。

    所以你的编码函数和我的解码函数还是有用武之地的。像我文中说到的解决oblog发送trackback ping导致我的博客乱码的问题。

  2. nt2003

    没有必要,用XMLDOM处理一下接受到的数据,中文的编码自然就正确了

评论已关闭。