ASP编码转换函数(GB转UTF-8等)

<%
'======================================utf转gb
function utf2gb(utfstr)
 for dig=1 to len(utfstr)
 if mid(utfstr,dig,1)="%" then
 if 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
 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

'===================================gb转utf8
function toutf8(szinput)
 dim wch, uch, szret
 dim x
 dim nasc, nasc2, nasc3
 
 if szinput = "" then
 toutf8 = szinput
 exit function
 end if
 for x = 1 to len(szinput)
 wch = mid(szinput, x, 1)
 nasc = ascw(wch)
 if nasc < 0 then nasc = nasc + 65536
 
 if (nasc and &hff80) = 0 then
 szret = szret & wch
 else
 if (nasc and &hf000) = 0 then
 uch = "%" & hex(((nasc \ 2 ^ 6)) or &hc0) & hex(nasc and &h3f or &h80)


szret = szret & uch
 else
 uch = "%" & hex((nasc \ 2 ^ 12) or &he0) & "%" & _
 hex((nasc \ 2 ^ 6) and &h3f or &h80) & "%" & _
 hex(nasc and &h3f or &h80)
 szret = szret & uch
 end if
 end if
 next
 
 toutf8 = szret
end function

'=====================================gb转unicode
function chinese2unicode(str)
 dim i
 dim str_one
 dim str_unicode
 if(isnull(str)) then
 exit function
 end if
 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

'=====================================url解码
function urldecode(enstr)
 dim destr
 dim c,i,v
 destr=""
 for i=1 to len(enstr)
 c=mid(enstr,i,1)
 if c="%" then
 v=eval("&h"+mid(enstr,i+1,2))
 if v<128 then
 destr=destr&chr(v)
 i=i+2
 else
 if isvalidhex(mid(enstr,i,3)) then
 if isvalidhex(mid(enstr,i+3,3)) then
 v=eval("&h"+mid(enstr,i+1,2)+mid(enstr,i+4,2))
 destr=destr&chr(v)
 i=i+5
 else
 v=eval("&h"+mid(enstr,i+1,2)+cstr(hex(asc(mid(enstr,i+3,1)))))
 destr=destr&chr(v)
 i=i+3
 end if
 else
 destr=destr&c
 end if
 end if
 else
 if c="+" then
 destr=destr&" "
 else
 destr=destr&c
 end if
 end if
 next
 urldecode=destr
end function

function isvalidhex(str)
 dim c
isvalidhex=true
 str=ucase(str)
 if len(str)<>3 then isvalidhex=false:exit function
 if left(str,1)<>"%" then isvalidhex=false:exit function
 c=mid(str,2,1)
 if not (((c>="0") and (c<="9")) or ((c>="a") and (c<="z"))) then isvalidhex=false:exit function
 c=mid(str,3,1)
 if not (((c>="0") and (c<="9")) or ((c>="a") and (c<="z"))) then isvalidhex=false:exit function
end function
%>

本博客所有文章如无特别注明均为原创。作者:sysdee复制或转载请以超链接形式注明转自 成功志
原文地址《ASP编码转换函数(GB转UTF-8等)
分享到:更多

相关推荐

发表评论

路人甲 表情
看不清楚?点图切换 Ctrl+Enter快速提交

网友评论(0)