日期:2014-05-16  浏览次数:20413 次

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] =
    [
&n