业务场景:获取中英混合字符串的前5个字节长度(一个中文字符2个字节长度,英文字符1个字节长度)
字符串 如 "agyf中23" 期望效果: "agyf"
如 "ag中yf中23" 期望效果: "ag中y"
//获取中文混合字符串的前5个字节长度
var a = "测_a5试测hi333房";
var count = 0;
var index;
for(var i = 0;i<a.length;i++){
//判断字符是否属于中文汉字(ASCII码表128位之后为各国语言字符)
count += a.charCodeAt(i) >128? 2 : 1;
if(count == 5){
index = i;
break;
}
if(count == 6){
index = i-1;
break;
}
}
document.write(a.substr(0,index+1));
另一种方法:(按位与运算判断是否中文)
原理:还是依据ASCII码表128位(二进制1000 0000)之后为各国语言字符。中文字符的二进制表示大于8位,所以与0xff00(二进制 1111 1111 0000 0000)进行与运算后,高位不等于0,以此来区分出中文字符
subStringbyByte: function(ByteLen,string) {
let l = string.length;
if (l<=0){
return ''
}
let blen=0
let char = "";
for(let i=0; i<l; i++) {
//判断若为中文 长度额外+1
if ((string.charCodeAt(i) & 0xff00) != 0) {
blen++
}
blen++
char+=string[i];
if (blen>stringLen-1){
char+="..."
break
}
}
return char
}