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

Creative Commons License

本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名小李刀刀(包含链接)。如您有任何疑问或者授权方面的协商,请给我发送邮件

  • Twitter
  • Facebook
  • Google Buzz
  • Blogger Post
  • Digg
  • MSDN
  • MySpace
  • Ping
  • TechNet
  • WordPress
  • Share/Bookmark
2006年3月10日 | 归档于 所谓技术
标签:
  1. 小李刀刀
    2006年3月13日 10:27 | #1

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

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

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

  2. nt2003
    2006年3月12日 20:53 | #2

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

发表评论

XHTML: 您可以使用这些标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>