1. 程式人生 > >url 編碼轉換(utf8

url 編碼轉換(utf8


%>
<%
'漢字轉換為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))))
        
dowhile 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
%>