asp對中文編碼及解碼,Decode和Encode中文網址處理
'==============================================================
'功能:ASP Server物件內建編碼函式
'描述:沒有對應的解碼函式
'==============================================================
Function VB_URLEncode(enStr)
VB_URLEncode = Server.URLEncode(enStr)
End Function
'==============================================================
'功能:Server.URLEncode()的解碼函式
'描述:目前該函式還未完善
' 當本頁面為UTF-8編碼時,源字串中包含如下格式子字串時:
' "編碼aa測aa試"
' 函式無法對VB_URLEncode()之後的編碼進行解碼
' 當本頁面為GB2312編碼是,該函式工作正常。
'==============================================================
Function VB_URLDecode(enStr)
dim deStr,strSpecial
dim c,i,v
deStr=""
strSpecial="!""#$%&'()*+,.-_/:;<=>
For i=1 To len(enStr)
c=Mid(enStr,i,1)
If c="%" Then
v=eval_r("&h"+Mid(enStr,i+1,2))
If inStr(strSpecial,chr(v))>0 Then
deStr=deStr&chr(v)
i=i+2
Else
v=eval_r("&h"+ Mid(enStr,i+1,2) + Mid(enStr,i+4,2))
deStr=deStr & chr(v)
i=i+5
End If
Else
If c="+" Then
deStr=deStr&" "
Else
deStr=deStr&c
End If
End If
Next
VB_URLDecode=deStr
End Function
'===========================================
'功能:對中文字元進行編碼,由GB2312轉換為UTF-8
'描述:與UTF8toGB()互逆
' 編碼後的格式可用於頁面之間的資料傳遞,但無法
' 正確顯示在HTML頁面,需要UTF8toGB()解碼。
'===========================================
Function VB_GBtoUTF8(szInput)
Dim wch, uch, szRet
Dim x
Dim nAsc, nAsc2, nAsc3
'如果輸入引數為空,則退出函式
If szInput = "" Then
VB_GBtoUTF8 = szInput
Exit Function
End If
'開始轉換
For x = 1 To Len(szInput)
'利用mid函式分拆GB編碼文字
wch = Mid(szInput, x, 1)
'利用ascW函式返回每一個GB編碼文字的Unicode字元程式碼
'注:asc函式返回的是ANSI 字元程式碼,注意區別
nAsc = AscW(wch)
If nAsc < 0 Then nAsc = nAsc + 65536
If (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
'GB編碼文字的Unicode字元程式碼在0800 - FFFF之間採用三位元組模版
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
VB_GBtoUTF8 = szRet
End Function
'===========================================
'功能:對中文字元進行編碼,由UTF-8轉換為GB2312
'描述:VB_GBtoUTF8()的解碼函式
'===========================================
Function VB_UTF8toGB(UTFStr)
For Dig=1 To len(UTFStr)
'如果UTF8編碼文字以%開頭則進行轉換
If mid(UTFStr,Dig,1)="%" Then
'UTF8編碼文字大於8則轉換為漢字
If len(UTFStr) >= Dig+8 Then
GBStr=GBStr & ConvChinese(mid(UTFStr,Dig,9))
Dig=Dig+8
Else
GBStr=GBStr & mid(UTFStr,Dig,1)
End If
Else
GBStr=GBStr & mid(UTFStr,Dig,1)
End If
Next
VB_UTF8toGB=GBStr
End Function
'UTF8編碼文字將轉換為漢字
Function ConvChinese(x)
A=split(mid(x,2),"%")
i=0
j=0
For i=0 To ubound(A)
A(i)=c16to2(A(i))
Next
For i=0 To ubound(A)-1
DigS=instr(A(i),"0")
Unicode=""
For j=1 To DigS-1
If j=1 Then
A(i)=right(A(i),len(A(i))-DigS)
Unicode=Unicode & A(i)
Else
i=i+1
A(i)=right(A(i),len(A(i))-2)
Unicode=Unicode & A(i)
End If
Next
If len(c2to16(Unicode))=4 Then
ConvChinese=ConvChinese & chrw(int("&H" & c2to16(Unicode)))
Else
ConvChinese=ConvChinese & chr(int("&H" & c2to16(Unicode)))
End If
Next
End Function
'二進位制程式碼轉換為十六進位制程式碼
Function c2to16(x)
i=1
For i=1 To len(x) step 4
c2to16=c2to16 & hex(c2to10(mid(x,i,4)))
Next
End Function
'二進位制程式碼轉換為十進位制程式碼
Function c2to10(x)
c2to10=0
If x="0" Then Exit Function
i=0
For i= 0 To len(x) -1
If mid(x,len(x)-i,1)="1" Then c2to10=c2to10+2^(i)
Next
End Function
'十六進位制程式碼轉換為二進位制程式碼
Function c16to2(x)
i=0
For i=1 To len(trim(x))
tempstr= c10to2(cint(int("&h" & mid(x,i,1))))
Do While len(tempstr)<4
tempstr="0" & tempstr
Loop
c16to2=c16to2 & tempstr
Next
End Function
'十進位制程式碼轉換為二進位制程式碼
Function c10to2(x)
mysign=sgn(x)
x=abs(x)
DigS=1
Do
If x<2^DigS Then
Exit Do
Else
DigS=DigS+1
End If
Loop
tempnum=x
i=0
For i=DigS To 1 step-1
If tempnum>=2^(i-1) Then
tempnum=tempnum-2^(i-1)
c10to2=c10to2 & "1"
Else
c10to2=c10to2 & "0"
End If
Next
If mysign=-1 Then c10to2="-" & c10to2
End Function
%>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312" />
<title>字元編碼測試</title>
</head>
<style type="text/css">
body{ margin:20px 10px; line-height: 140%; font-size:12px; color:blue;}
</style>
<body>
<%
On Error Resume Next
str = "##testingTest$$##編碼aa測aa試aa##!!67&#=;"
Response.Write("源字串: " & str & "<BR>")
str1 = VB_URLEncode(str)
str2 = VB_URLDecode(str1)
Response.Write("VB_URLEncode: " & str1 & "<BR>")
Response.Write("VB_URLDecode: " & str2 & "<BR>")
If str2 = str Then Response.Write("結果==>解碼正確, URLEncode對字串中除26個英文字母(包括大小寫)之外的所有字元都進行編碼,中文字元為2位元組,非中文字元1位元組<BR>")
Response.Write("------------------------------------------------------- <BR>")
str3 = VB_GBtoUTF8(str)
str4 = VB_UTF8toGB(str3)
Response.Write("VB_GBtoUTF8: " & str3 & "<BR>")
Response.Write("VB_UTF8toGB: " & str4 & "<BR>")
If str4 = str Then Response.Write("結果==>解碼正確,GBtoUTF8只對中文字元編碼,按每個中文字元3位元組編碼<BR>")
Response.End()
%>
</body>
</html>