在用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