JavaScript计算字符串字节长度:UTF-8与GBK编码处理方案
作者:小括号时间:2026-10-27 15:32:00浏览:277
本文介绍在JavaScript中如何准确计算包含中文的字符串字节长度。由于不同编码格式下字符占用的字节数不同,UTF-8编码中中文通常占3个字节,而GBK编码中占2个字节。文章提供了多种实现方案,包括基于charCodeAt判断ASCII与非ASCII字符、正则匹配汉字范围以及区分UTF-8和GBK编码的具体函数实现,帮助开发者根据实际需求选择合适的方法。
JavaScript计算字符串字节长度:UTF-8与GBK编码处理方案
方案一:
代码示例如下:
function byteLength(str) {
var byteLen = 0, len = str.length;
if( !str ) return 0;
for( var i=0; i<len; i++ )
byteLen += str.charCodeAt(i) > 255 ? 2 : 1;
return byteLen;
}
说明:byteLength(str) 参数: string str: 要计算字节长度的字符串(非ASCII的字符算2字节) 方案二:
JS获取字符串实际长度!
今日新增功能:程序员常用的字符串长度检测工具,因JS默认中英文字符长度均为1,此处需自行判断并获取实际长度。
代码示例如下:
function GetLength(str) {
///<summary>获得字符串实际长度,中文2,英文1</summary>
///<param name="str">要获得长度的字符串</param>
var realLength = 0, len = str.length, charCode = -1;
for (var i = 0; i < len; i++) {
charCode = str.charCodeAt(i);
if (charCode >= 0 && charCode <= 128) realLength += 1;
else realLength += 2;
}
return realLength;
};
执行代码:
alert(GetLength('测试测试ceshiceshi)); 方案三: 暂未通过测试
代码示例如下:
function getByteLen(val) {
var len = 0;
for (var i = 0; i < val.length; i++) {
if (val[i].match(/[\u4e00-\u9fa5 ]/ig) != null)
len += 2;
else
len += 1;
}
return len;
} 方案四:
GBK长度计算函数:
代码示例如下:
// GBK字符集实际长度计算
function getStrLeng(str){
var realLength = 0;
var len = str.length;
var charCode = -1;
for(var i = 0; i < len; i++){
charCode = str.charCodeAt(i);
if (charCode >= 0 && charCode <= 128) {
realLength += 1;
}else{
// 如果是中文则长度加2
realLength += 2;
}
}
return realLength;
}
UTF8长度计算函数:
代码示例如下:
// UTF8字符集实际长度计算
function getStrLeng(str){
var realLength = 0;
var len = str.length;
var charCode = -1;
for(var i = 0; i < len; i++){
charCode = str.charCodeAt(i);
if (charCode >= 0 && charCode <= 128) {
realLength += 1;
}else{
// 如果是中文则长度加3
realLength += 3;
}
}
return realLength;
}作者最新文章
JS语法错误会阻止加载吗?区分SyntaxError与资源加载失败
2026-11-05 16:08:46
JavaScript常见SyntaxError语法错误排查与修复方法
2026-11-05 13:58:44
JS中slice、substring和substr截取字符串的区别
2026-11-05 13:43:47
JS 转 TS 手动迁移最佳实践:从配置 tsconfig 到消除 any 类型
2026-11-05 11:53:32
为什么JS数组push后得到的是数字而不是数组?
2026-11-05 09:59:18
