在用XMLHTTP进行远程数据传输的时候,如果涉及到不同编码,比如从oblog向我的博客发送一个trackback ping,数据中包含的中文字符就会出现乱码。
为了解决这个问题,可以在发送之前,把所有的数据中的中文都进行Unicode编码然后再传输。这样就可以顺利解决问题。
但是有时候还会涉及到另外一个问题,就是到了目标程序后,要进行数据库检索,发送过来的中文字符串都已经编码为类似 绎 这样的Unicode编码,而数据库中的数据虽然以unicode编码保存,但是却还是中文字符,并没有表示为 绎 这样的形式。这就导致检索失败。
为了解决这样的问题,我只好采取这样的办法:发送端对中文字符串进行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编解码函数
裁纸刀下版权所有,允许非商业用途转载,转载时请原样转载并标明来源、作者,保留原文链接。
[quote=nt2003]没有必要,用XMLDOM处理一下接受到的数据,中文的编码自然就正确了[/quote]
嗯,不过不是所有的XMLHttp应用都采用了XMLDOM方式来处理数据。博客的Trackback Ping就还是用的post方式。
所以你的编码函数和我的解码函数还是有用武之地的。像我文中说到的解决oblog发送trackback ping导致我的博客乱码的问题。
没有必要,用XMLDOM处理一下接受到的数据,中文的编码自然就正确了