使用UTF-8页面时可以在 GB2312 的编码方式中将其转换成汉文字串
发布时间:2023-07-31 14:54:54 所属栏目:Asp教程 来源:
导读:今天做个小功能的时候遇到的问题,我当前的页面是utf-8编码,获取百度来源url中的汉字编码有可能是gb下的,在网上搜了很久,解决方法最多的一个例子是利用xmlhttp远程请求一下再次获取,但这样无疑加重了代码的执行效
今天做个小功能的时候遇到的问题,我当前的页面是utf-8编码,获取百度来源url中的汉字编码有可能是gb下的,在网上搜了很久,解决方法最多的一个例子是利用xmlhttp远程请求一下再次获取,但这样无疑加重了代码的执行效率,其他更好的方法也没搜到,但这个方法肯定不能立即使用的,所以最终想到了另个办法。 举个例子,如:“汉字” 在utf-8下的编码为:%E6%B1%89%E5%AD%97 在gb2312下的编码为:%BA%BA%D7%D6 而我的网页当前为utf-8编码下,那么如何将这些纯粹的编码字符串转换为汉字呢? 首先,我的页面中要包含下面这个函数: Function URLDecode(enStr) Dim deStr,strSpecial Dim c,i,v deStr="" strSpecial="!""#$%&'()*+,.-_/:;<=>[email protected][/]^`{|}~%" For i=1 To Len(enStr) c=Mid(enStr,i,1) If c="%" Then v=eval("&h"+Mid(enStr,i+1,2)) If inStr(strSpecial,Chr(v))>0 Then deStr=deStr&Chr(v) i=i+2 Else v=eval("&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 URLDecode=deStr End Function 上面这个函数是一个url解码函数,下面的函数是utf-8编码转换为汉字的函数: Function UTF2GB(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 UTF2GB = 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 在正常的utf-8页面下,我们可以直接这样用: Response.Write UTF2GB("%E6%B1%89%E5%AD%97") 即:UTF2GB("%E6%B1%89%E5%AD%97") = "汉字" 但若当前utf8页面获取到的是一个gb下的编码(如%BA%BA%D7%D6),该怎么转换成汉字呢?这时候就要用到上面那个URLDecode(enStr)解码函数了,但不能直接用,要特别注意进行临时改变下当前页面的编码模式,应用示例如下: <% Session.CodePage = 936 '强制转换到GB2312下 Dim mykey:mykey = URLDecode("%BA%BA%D7%D6") 'GB下的编码字符串 Session.CodePage = 65001 '将页面再次回到utf-8编码下 Response.write(mykey) %> 这时就获得了汉字了。怎么样,简单吧。 (编辑:聊城站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐