大家帮忙解释一段Js代码----Unicode 转 Utf8 代码

时间:2023-01-10 13:06:16

 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了么?

5 个解决方案

#1


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

#2


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

#3


引用楼主 zhangqiang1283 的回复:
上面这个逻辑的地方 if(wchr <0x80) 和else if(wchr < 0x800) 不是重复了吗?

whr小于 0x80 不就是 小于 0x800了么?


小于 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);
否则如果则执行下面的 。

#1


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

#2


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

#3


引用楼主 zhangqiang1283 的回复:
上面这个逻辑的地方 if(wchr <0x80) 和else if(wchr < 0x800) 不是重复了吗?

whr小于 0x80 不就是 小于 0x800了么?


小于 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);
否则如果则执行下面的 。