<%
'目的: UTF-8 でエンコードされた中国語文字を、英語と数字と互換性のある GB2312 コードに変換します。
'著作権: オリジナルではありますが、実際には他のアルゴリズムの一部を参照しています。
'使用法: Response.write UTF2GB("%E9%83%BD%E5%B8%82%E6%83%85%E7%B7%A3 %E6%98%9F%E5%BA%A7")
関数 UTF2GB(UTFStr)
Dig=1 から len(UTFStr) の場合
Mid(UTFStr,Dig,1)="%" の場合
len(UTFStr) >= Dig+8 の場合
GBStr=GBStr & Conv Chinese(mid(UTFStr,Dig,9))
掘る=掘る+8
それ以外
GBStr=GBStr & Mid(UTFStr,Dig,1)
終了する場合
それ以外
GBStr=GBStr & Mid(UTFStr,Dig,1)
終了する場合
次
UTF2GB=GBStr
終了関数
function Conv Chinese(x)
A=split(mid(x,2),"%")
i=0
j=0
、i=0 から ubound(A)
A(i)=c16to2(A(i))
次
は i=0 から ubound(A)-1 まで
DigS=instr(A(i),"0")
ユニコード=""
j=1 から DigS-1 まで
j=1 の場合
A(i)=right(A(i),len(A(i))-DigS)
Unicode=Unicode & A(i)
それ以外
i=i+1
A(i)=右(A(i),len(A(i))-2)
Unicode=Unicode & A(i)
終了する場合
次の
場合 len(c2to16(Unicode))=4 の場合
Conv中国語=Conv中国語 & chrw(int("&H" & c2to16(Unicode)))
それ以外
Conv中国語=Conv中国語 & chr(int("&H" & c2to16(Unicode)))
終了する場合
次
関数 c2to16(x)
の終了
i=1
i=1 から len(x) へのステップ 4
c2to16=c2to16 & hex(c2to10(mid(x,i,4)))
次
終了関数
function c2to10(x)
c2to10=0
x="0" の場合、関数を終了します
i=0
i= 0 ~ len(x) -1 の場合
Mid(x,len(x)-i,1)="1" の場合、c2to10=c2to10+2^(i)
次
終了関数
function c16to2(x)
i=0
i=1 から len(trim(x)) まで
tempstr= c10to2(cint(int("&h" & mid(x,i,1))))
len(tempstr)<4 の間実行します
tempstr="0" & tempstr
ループ
c16to2=c16to2 & tempstr
次
終了関数
function c10to2(x)
mysign=sgn(x)
x=abs(x)
掘る=1
する
x<2^DigS の場合
終了します
それ以外
ディグS=ディグS+1
終了する場合
ループ
tempnum=x
i=0
for i=DigS から 1 ステップ-1
tempnum>=2^(i-1) の場合
tempnum=tempnum-2^(i-1)
c10to2=c10to2 & "1"
それ以外
c10to2=c10to2 & "0"
終了する場合
次
mysign=-1 の場合、c10to2="-" & c10to2
終了関数
%>