asp全局使用utf-8编码,一切正常,但是通过url传递中文参数,用Request.QueryString()获取参数的值的时候会出现乱码的现象。
解决方法一、
可以通过传递参数的时候用js把中文用urlencode编码,再在asp页面用urldecode解码。注意 js的urlencode是utf-8的,asp页面的decode也要保持utf-8的解码才行。
asp的urldecode函数utf-8版本的代码如下:
Private Function UrlEncode_GBToUtf8(szInput)
Dim wch, uch, szRet
Dim x
Dim nAsc, nAsc2, nAsc3
If szInput = "" Then
UrlEncode_GBToUtf8_V2= szInput
Exit Function
End If
For x = 1 To Len(szInput)
wch = Mid(szInput, x, 1)
nAsc = AscW(wch)
If nAsc < 0 Then nAsc = nAsc + 65536
If wch = "+" then
szRet = szRet & "%2B"
ElseIf wch = "%" then
szRet = szRet & "%25"
ElseIf (nAsc And &HFF80) = 0 Then
szRet = szRet & wch
Else
If (nAsc And &HF000) = 0 Then
uch = "%" & Hex(((nAsc \ 2 ^ 6)) Or &HC0) & Hex(nAsc And &H3F Or &H80)
szRet = szRet & uch
Else
uch = "%" & Hex((nAsc \ 2 ^ 12) Or &HE0) & "%" & _
Hex((nAsc \ 2 ^ 6) And &H3F Or &H80) & "%" & _
Hex(nAsc And &H3F Or &H80)
szRet = szRet & uch
End If
End If
Next
UrlEncode_GBToUtf8= szRet
End Function方法二、传递时用js的escape函数把中文编码,再在asp端解码
asp端的解码函数代码如下:
Function UnEscape(str)
Dim i, s, c
s = ""
For i = 1 To Len(str)
c = Mid(str, i, 1)
If Mid(str, i, 2) = "%u" And i <= Len(str) - 5 Then
If IsNumeric("&H" & Mid(str, i + 2, 4)) Then
s = s & CHRW(CInt("&H" & Mid(str, i + 2, 4)))
i = i + 5
Else
s = s & c
End If
ElseIf c = "%" And i <= Len(str) - 2 Then
If IsNumeric("&H" & Mid(str, i + 1, 2)) Then
s = s & CHRW(CInt("&H" & Mid(str, i + 1, 2)))
i = i + 2
Else
s = s & c
End If
Else
s = s & c
End If
Next
UnEscape = s
End Function









