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
小于 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);
否则如果则执行下面的 。
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
小于 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);
否则如果则执行下面的 。
whr小于 0x80 不就是 小于 0x800了么?
你为要说whr小于0x80就小于0x800了呢 。如果一样的,那不是报错吗。难道这是同一个吗?意思就是说如果(whr<0x80)则执行 strUTF8+=strUni.charAt(i);
否则如果则执行下面的 。