url 编码转换(utf8 - gb2312)

最近在做一个程序时遇到.net页面和asp页面互相访问的情况,.net页面默认的编友格式都是utf-8的,而asp页面中全部都用的是ANSI(GB2312),在.net页面中点击指向asp页面的链接时,由于编码问题,在传递的参数中的汉字,在asp页面中无法读取。最后找到这段代码搞定,把这段代码嵌入每一个要接受汉字参数的asp页面中即可。

 

<%

if(Request.ServerVariables("QUERY_STRING")<>"" and InStr(Request.ServerVariables("QUERY_STRING"),"=%")<>0) then
    '对参数进行utf-8到gb2312的转码
 Url="http://"&Request.ServerVariables("SERVER_NAME")&Request.ServerVariables("Path_info")&"?"&UTF2GB(Request.ServerVariables("QUERY_STRING"))
 '将转码后得到的url进行重定向,这样参数的编码即为gb2312,可以和oa中的程序良好的交互
 response.redirect Url
end if

%>
<%
' 汉字转换为UTF-8
function chinese2unicode(Str) 
  dim i 
  dim Str_one 
  dim Str_unicode 
  
for  i = 1  to len(Str) 
    Str_one
= Mid(Str,i, 1
    Str_unicode
= Str_unicode & chr( 38
    Str_unicode
= Str_unicode & chr( 35
    Str_unicode
= Str_unicode & chr( 120
    Str_unicode
= Str_unicode &  Hex(ascw(Str_one)) 
    Str_unicode
= Str_unicode & chr( 59
  next 
  chinese2unicode
= Str_unicode 
end function  





' UTF-8 To GB2312

function UTF2GB(UTFStr)
    
    
for  Dig = 1  to len(UTFStr)
        
if  mid(UTFStr,Dig, 1 ) = " % "  then
            
' 若为空格,则仅对空格作处理(3位)
             if  mid(UTFStr,Dig, 3 =   " %20 "  then
                GBStr
= GBStr  &  ConvChinese(mid(UTFStr,Dig, 3 ))
                Dig
= Dig + 2
            
' 若不为空格,而且剩余的utf-8字符串长度大于或等于8,则取汉字(9位)
            elseif 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 


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
        
' response.write "a"&Unicode&"a"
            ' response.write len(c2to16(Unicode))
         '     response.end
            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
%>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值