首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

GB2312编码encodeURI()后怎么decode

2013-04-20 
GB2312编码encodeURI()后如何decode用javascript如何把 %D6%D0%B9%FA 解码为 中国只要javascript解决了,在

GB2312编码encodeURI()后如何decode
用javascript如何把 %D6%D0%B9%FA 解码为 中国

只要javascript 解决了,在 btbtd 的网站上找到了,通过编码映射表解决的!
作者应该是 Shawn.Steele@microsoft.com,btbtd 整理收集了这个代码!

L@_@K

<!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.csdn.net/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>

热点排行