https://blog.csdn.net/SJian123/article/details/40151031 asp对中文编码及解码,Decode和Encode中文网址处理 2014年10月16日 16:54:03 编程遗失的时光 阅读数:4953更多 个人分类: asp 计算机编程 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SJian123/article/details/40151031 <%'-------------------------------------------------------------------------- '============================================================== '功能: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>
|