GB2312编码encodeURI()后如何decode

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>shawl.qiu template</title> </head> <body> <script type="text/javascript" src="http://www.btbtd.org/test/sqJsTools/tools/Url/Url/CP936.js "></script> <script type="text/javascript"> /*<![CDATA[*/ /* 作者:邱少伟 CSND 账号:http://hi.youkuaiyun.com/btbtd 作者网站:http://www.btbtd.org/ */ var pe = "%D6%D0%B9%FA"; document.write("<p/>pe: "+pe); document.write("<p/>de: "+IDecodeURIGb(pe, [CP936])); document.write("<hr/>"); function IDecodeURIGb(Source, CP936) // Pe = percent encoding; %xx[,%xx] { // shawl.qiu code, return string|void return; Func: fGetUtfHex var bStr = false; if(Source.constructor==String) Source = [Source], bStr = true; //if(CP936==null) fFatalError("编码映射表不能为空!"); var iLBound = iUBound = 0; iLBound = -1; iUBound = 0x7f; Source[0] = Source[0].replace(/\+/g, " "); var Len = Source[0].length; for(var i=0; i<Len; i++) { var iIndex = Source[0].indexOf("%", i); if(iIndex===-1) break; var sHex = Source[0].slice(iIndex+1, iIndex+3); var iCode = parseInt(sHex, 16); //document.write("<br/>sHex: "+sHex); if(iCode>-1&&iCode<=0x7f) // ascii { Source[0] = [ Source[0].slice(0, iIndex) , String.fromCharCode(iCode) , Source[0].slice(iIndex+3) ].join(""); } else { var sHexRaw = Source[0].slice(iIndex+3, iIndex+6); //document.write("<br/>sHexRaw: "+sHexRaw); if(sHexRaw.charAt(0)!="%") continue; sHex += sHexRaw.slice(1); var sUniHex = fGetUtfHex(sHex, CP936); //document.write("<br/>sHex: "+sHex); //document.write("<br/>sUniHex: "+sUniHex); Source[0] = [ Source[0].slice(0, iIndex) , String.fromCharCode(parseInt(sUniHex, 16)) , Source[0].slice(iIndex+6) ].join(""); } // end if(iCode<-1&&iCode<0x7f) } // end for(var i=0; i<Len; i++) if(bStr) return Source[0]; } // end function IDecodeURIGb(Source) function fGetUtfHex(sGbHex, CP936) { // shawl.qiu code, return string sGbHex = sGbHex.toUpperCase(); var iIndex = CP936[0].indexOf(sGbHex); if(iIndex===-1) return "0x005F"; var iBegin = iIndex+sGbHex.length+1; return CP936[0].substring(iBegin, iBegin+6); } // end function fGetMapTableChar(sHex) /*]]*/ </script> </body> </html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值