Unicode编解码函数

时间:2022-05-02
本文章向大家介绍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