if(null==strInUni)
    returnnull;
  var strUni=String(strInUni);
  var strUTF8=String();
  for(var i=0;i<strUni.length;i++){
    var wchr=strUni.charCodeAt(i);
    if(wchr<0x80){
      strUTF8+=strUni.charAt(i);
      }
    else if(wchr<0x800){
      var chr1=wchr&0xff;
      var chr2=(wchr>>8)&0xff;
      strUTF8+=String.fromCharCode(0xC0|(chr2<<2)|((chr1>>6)&0x3));
      strUTF8+=String.fromCharCode(0x80|(chr1&0x3F));
      }
    else{
      var chr1=wchr&0xff;
      var chr2=(wchr>>8)&0xff;
      strUTF8+=String.fromCharCode(0xE0|(chr2>>4));
      strUTF8+=String.fromCharCode(0x80|((chr2<<2)&0x3C)|((chr1>>6)&0x3));
      strUTF8+=String.fromCharCode(0x80|(chr1&0x3F));
      }
    }
  return strUTF8;
  }
看不懂这段代码,大家帮忙解释下!
if(wchr<0x80){
      strUTF8+=strUni.charAt(i);
      }
    else if(wchr<0x800){
      var chr1=wchr&0xff;
      var chr2=(wchr>>8)&0xff;
      strUTF8+=String.fromCharCode(0xC0|(chr2<<2)|((chr1>>6)&0x3));
      strUTF8+=String.fromCharCode(0x80|(chr1&0x3F));
      }
上面这个逻辑的地方   if(wchr <0x80) 和else if(wchr < 0x800)    不是重复了吗?whr小于 0x80 不就是 小于 0x800了么?

解决方案 »

  1.   

    可能是要排除>=0x800的情况吧!
      

  2.   

    用URI.encode(str),后台再用java.net.URI.decode(str,“UTF-8”),试试
      

  3.   


    小于 0x80 时会进入 if 的分支,当这个分支运行完了之后就跳出 if 语句了,不会再判断是否小于 0x800 了。
      

  4.   

    因为这里用的是:if ( wchr < 0x80 ) {
       ...
    } else if ( wchr < 0x800 ) {
       ...
    }而不是if ( wchr < 0x80 ) {
       ...
    }
    if ( wchr < 0x800 ) {
       ...
    }这样的结构
      

  5.   

    上面这个逻辑的地方 if(wchr <0x80) 和else if(wchr < 0x800) 不是重复了吗?whr小于 0x80 不就是 小于 0x800了么?
     
    你为要说whr小于0x80就小于0x800了呢 。如果一样的,那不是报错吗。难道这是同一个吗?意思就是说如果(whr<0x80)则执行 strUTF8+=strUni.charAt(i);
    否则如果则执行下面的 。