王彬 程序员 王彬 ASP PHP C# .NET AJAX 笔记

我的PHP,.NET开源之路

可以解决asp.net request.Querystring["中文"] 乱码的问题!
function EncodeUtf8(s1)
{
var s 
= escape(s1);
//alert(s);
var sa = s.split("%");
var retV 
="";
if(sa[0!= "") retV = sa[0];
for(var i = 1; i < sa.length; i ++)
{
if(sa[i].substring(0,1== "u")
{

retV 
+= Hex2Utf8(Str2Hex(sa[i].substring(1,5)));
retV 
+= sa[i].substring(5,100);//垃圾猪注:我改进了下算法,支持存在非中文字符了,中间之间长度应该不会超过100个吧.不然就++吧
}

else
{
retV 
+=  sa[i];
}

}

return retV;
}


//----------------------------------------------------------------------------
function Str2Hex(s)
{
var c 
= "";
var n;
var ss 
= "0123456789ABCDEF";
var digS 
= "";
for(var i = 0; i < s.length; i ++)
{
= s.charAt(i);

= ss.indexOf(c);

digS 
+= Dec2Dig(eval(n));


}

return digS;
}


//----------------------------------------------------------------------------
function Dec2Dig(n1)
{
var s 
= "";
var n2 
= 0;
for(var i = 0; i < 4; i++)
{
n2 
= Math.pow(2,3 - i);



if(n1 >= n2)
{
+= '1';
n1 
= n1 - n2;
}

else
{
+= '0';
}

}

//alert(s);
return s;
}


//----------------------------------------------------------------------------
function Dig2Dec(s)
{
var retV 
= 0;
if(s.length == 4)
{
for(var i = 0; i < 4; i ++)
{
retV 
+= eval(s.charAt(i)) * Math.pow(23 - i);
}

return retV;
}

return -1;
}


//----------------------------------------------------------------------------
function Hex2Utf8(s)
{
var retS 
= "";
var tempS 
= "";
var ss 
= "";
if(s.length == 16)
{
tempS 
= "1110" + s.substring(04);
tempS 
+= "10" + s.substring(410); 
tempS 
+= "10" + s.substring(10,16); 
var sss 
= "0123456789ABCDEF";
for(var i = 0; i < 3; i ++)
{
retS 
+= "%";
ss 
= tempS.substring(i * 8, (eval(i)+1)*8);
retS 
+= sss.charAt(Dig2Dec(ss.substring(0,4)));
retS 
+= sss.charAt(Dig2Dec(ss.substring(4,8)));
}

return retS;
}

return "";
}
posted on 2008-06-15 17:33  wangbin  阅读(1430)  评论(1编辑  收藏  举报