<%
'Objetivo: converter caracteres chineses codificados em UTF-8 em código GB2312, compatível com inglês e números
'Direitos autorais: Embora seja original, na verdade se refere a alguns algoritmos de outros.
'Uso: Response.write UTF2GB("%E9%83%BD%E5%B8%82%E6%83%85%E7%B7%A3 %E6%98%9F%E5%BA%A7")
função UTF2GB(UTFStr)
para Dig=1 para len(UTFStr)
se mid(UTFStr,Dig,1)="%" então
se len(UTFStr) >= Dig+8 então
GBStr=GBStr & ConvChinês(mid(UTFStr,Dig,9))
Escavar=Escavar+8
outro
GBStr=GBStr & mid(UTFStr,Dig,1)
terminar se
outro
GBStr=GBStr & mid(UTFStr,Dig,1)
terminar se
próximo
UTF2GB=GBStr
função final
função ConvChinese(x)
A=divisão(meio(x,2),"%")
eu=0
j=0
para i=0 para ubound(A)
UMA(eu)=c16to2(UMA(eu))
próximo
para i=0 para ubound(A)-1
DigS=instr(A(i),"0")
Unicode=""
para j=1 para DigS-1
se j = 1 então
A(i)=direita(A(i),len(A(i))-DigS)
Unicode=Unicode & A(i)
outro
eu=eu+1
A(i)=direita(A(i),len(A(i))-2)
Unicode=Unicode & A(i)
terminar se
próximo
se len(c2to16(Unicode))=4 então
ConvChinês=ConvChinês & chrw(int("&H" & c2to16(Unicode)))
outro
ConvChinês=ConvChinês & chr(int("&H" & c2to16(Unicode)))
terminar se
próximo
função final
função c2to16(x)
eu=1
para i=1 para len(x) etapa 4
c2to16=c2to16 & hex(c2to10(meio(x,i,4)))
próximo
função final
função c2to10(x)
c2to10=0
se x = "0" então saia da função
eu=0
para i= 0 para len(x) -1
se mid(x,len(x)-i,1)="1" então c2to10=c2to10+2^(i)
próximo
função final
função c16to2(x)
eu=0
para i=1 para len(trim(x))
tempstr= c10to2(cint(int("&h" & mid(x,i,1))))
faça enquanto len(tempstr)<4
tempstr="0" & tempstr
laço
c16to2=c16to2 & tempstr
próximo
função final
função c10to2(x)
meusinal=sgn(x)
x=abs(x)
Escavações=1
fazer
se x<2^DigS então
sair, faça
outro
DigS=DigS+1
terminar se
laço
tempnum=x
i=0
para i=DigS para 1 passo-1
se tempnum>=2^(i-1) então
tempnum=tempnum-2^(i-1)
c10to2=c10to2 & "1"
outro
c10to2=c10to2 & "0"
terminar se
próximo
se meusinal=-1 então c10to2="-" & c10to2
função final
%>