function   utf8CodeToChineseChar(strUtf8)  
  {   <">

javascript 怎么解UTF8编码呢?

80酷酷网    80kuku.com

  javascript|编码<script>  
  alert(chineseFromUtf8Url("%E4%B8%AD%E6%96%87"))  
  function   utf8CodeToChineseChar(strUtf8)  
  {  
      var   iCode,   iCode1,   iCode2;  
      iCode   =   parseInt("0x"   +   strUtf8.substr(1,   2));  
      iCode1   =   parseInt("0x"   +   strUtf8.substr(4,   2));  
      iCode2   =   parseInt("0x"   +   strUtf8.substr(7,   2));  
       
      return   String.fromCharCode(((iCode   &   0x0F)   <<   12)   |    
  ((iCode1   &   0x3F)   <<     6)   |  
  (iCode2   &   0x3F));  
  }  
   
  //   将   UTF8   编码的   URL   中的中文部分(<   0xFFFF)转换过来  
  function   chineseFromUtf8Url(strUtf8)    
  {  
  var   bstr   =   "";  
  var   nOffset   =   0; //   processing   point   on   strUtf8  
   
  if(   strUtf8   ==   ""   )  
      return   "";  
   
  strUtf8   =   strUtf8.toLowerCase();  
  nOffset   =   strUtf8.indexOf("%e");  
  if(   nOffset   ==   -1   )  
      return   strUtf8;  
       
  while(   nOffset   !=   -1   )  
  {  
      bstr   +=   strUtf8.substr(0,   nOffset);  
      strUtf8   =   strUtf8.substr(nOffset,   strUtf8.length   -   nOffset);  
      if(   strUtf8   ==   ""   ||   strUtf8.length   <   9   )       //   bad   string  
          return   bstr;  
       
      bstr   +=   utf8CodeToChineseChar(strUtf8.substr(0,   9));  
      strUtf8   =   strUtf8.substr(9,   strUtf8.length   -   9);  
      nOffset   =   strUtf8.indexOf("%e");  
  }  
   
  return   bstr   +   strUtf8;  
  }  
   
  function   unicodeFromUtf8(strUtf8)    
  {  
  var   bstr   =   "";  
  var   nTotalChars   =   strUtf8.length; //   total   chars   to   be   processed.  
  var   nOffset   =   0; //   processing   point   on   strUtf8  
  var   nRemainingBytes   =   nTotalChars; //   how   many   bytes   left   to   be   converted  
  var   nOutputPosition   =   0;  
  var   iCode,   iCode1,   iCode2; //   the   value   of   the   unicode.  
   
  while   (nOffset   <   nTotalChars)  
  {  
  iCode   =   strUtf8.charCodeAt(nOffset);  
  if   ((iCode   &   0x80)   ==   0) //   1   byte.  
  {  
  if   (   nRemainingBytes   <   1   ) //   not   enough   data  
  break;  
   
  bstr   +=   String.fromCharCode(iCode   &   0x7F);  
  nOffset   ++;  
  nRemainingBytes   -=   1;  
  }  
  else   if   ((iCode   &   0xE0)   ==   0xC0) //   2   bytes  
  {  
  iCode1   =     strUtf8.charCodeAt(nOffset   +   1);  
  if   (   nRemainingBytes   <   2   || //   not   enough   data  
    (iCode1   &   0xC0)   !=   0x80   ) //   invalid   pattern  
  {  
  break;  
  }  
   
  bstr   +=   String.fromCharCode(((iCode   &   0x3F)   <<   6)   |   (   iCode1   &   0x3F));  
  nOffset   +=   2;  
  nRemainingBytes   -=   2;  
  }  
  else   if   ((iCode   &   0xF0)   ==   0xE0) //   3   bytes  
  {  
  iCode1   =     strUtf8.charCodeAt(nOffset   +   1);  
  iCode2   =     strUtf8.charCodeAt(nOffset   +   2);  
  if   (   nRemainingBytes   <   3   || //   not   enough   data  
    (iCode1   &   0xC0)   !=   0x80   || //   invalid   pattern  
    (iCode2   &   0xC0)   !=   0x80   )  
  {  
  break;  
  }  
   
  bstr   +=   String.fromCharCode(((iCode   &   0x0F)   <<   12)   |    
  ((iCode1   &   0x3F)   <<     6)   |  
  (iCode2   &   0x3F));  
  nOffset   +=   3;  
  nRemainingBytes   -=   3;  
  }  
  else //   4   or   more   bytes   --   unsupported  
  break;  
  }  
   
  if   (nRemainingBytes   !=   0)  
  {  
  //   bad   UTF8   string.  
  return   "";  
  }  
   
  return   bstr;  
  }  
  </script> 


分享到
  • 微信分享
  • 新浪微博
  • QQ好友
  • QQ空间
点击: