JS 获取中文混合字符串的前5个字节长度

文章介绍了两种方法来获取包含中文和英文的字符串的前5个字节长度。第一种是通过ASCII码值判断字符类型,第二种利用位与运算识别中文字符。这两种技术主要用于处理多语言字符串截取问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

业务场景:获取中英混合字符串的前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
                    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值