<%
'Propósito: Convertir caracteres chinos codificados en UTF-8 al código GB2312, compatible con inglés y números
'Copyright: Aunque es original, en realidad hace referencia a unos algoritmos de otros.
'Uso: Response.write UTF2GB("%E9%83%BD%E5%B8%82%E6%83%85%E7%B7%A3 %E6%98%9F%E5%BA%A7")
función UTF2GB(UTFStr)
para Dig=1 a len(UTFStr)
si mid(UTFStr,Dig,1)="%" entonces
si len(UTFStr) >= Dig+8 entonces
GBStr=GBStr & ConvChinese(mediados(UTFStr,Dig,9))
Excavar=Excavar+8
demás
GBStr=GBStr y medio(UTFStr,Dig,1)
terminar si
demás
GBStr=GBStr y medio(UTFStr,Dig,1)
terminar si
próximo
UTF2GB=GBStr
función final
función ConvChinese(x)
A=dividir(mediados(x,2),"%")
yo=0
j=0
para i=0 a ulimitado(A)
A(i)=c16to2(A(i))
siguiente
para i=0 a ubound(A)-1
DigS=instr(A(i),"0")
Unicódigo=""
para j=1 a DigS-1
si j=1 entonces
A(i)=derecha(A(i),len(A(i))-DigS)
Unicode=Unicode y A(i)
demás
yo=yo+1
A(i)=derecha(A(i),len(A(i))-2)
Unicode=Unicode y A(i)
terminar si
siguiente
si len(c2to16(Unicode))=4 entonces
ConvChinese=ConvChinese & chrw(int("&H" & c2to16(Unicode)))
demás
ConvChinese=ConvChinese & chr(int("&H" & c2to16(Unicode)))
terminar si
próximo
función final
función c2to16(x)
yo=1
para i=1 a len(x) paso 4
c2to16=c2to16 & hexadecimal(c2to10(medio(x,i,4)))
próximo
función final
función c2to10(x)
c2a10=0
si x="0" entonces sale de la función
yo=0
para i= 0 a len(x) -1
si mid(x,len(x)-i,1)="1" entonces c2to10=c2to10+2^(i)
próximo
función final
función c16to2(x)
yo=0
para i=1 a len(trim(x))
tempstr= c10to2(cint(int("&h" & mid(x,i,1))))
hacer mientras len(tempstr)<4
tempstr="0" & tempstr
bucle
c16to2=c16to2 & tempstr
próximo
función final
función c10to2(x)
mi signo=sgn(x)
x=abs(x)
Excavaciones=1
hacer
si x<2^DigS entonces
salir hacer
demás
Excavar=Excavar+1
terminar si
bucle
número temporal=x
i=0
para i=Excavar a 1 paso-1
si tempnum>=2^(i-1) entonces
número temporal=número temporal-2^(i-1)
c10to2=c10to2 & "1"
demás
c10to2=c10to2 & "0"
terminar si
próximo
si mysign=-1 entonces c10to2="-" & c10to2
función final
%>