在JavaScript中,查询字符串的字节长度通常涉及到字符编码的问题,尤其是当字符串包含非ASCII字符时。ASCII字符集中的每个字符都占用一个字节,而非ASCII字符(如中文、表情符号等)在UTF-8编码下可能占用多个字节。
TextEncoder
TextEncoder
是一个浏览器内置的API,可以将字符串编码为UTF-8格式的字节数组,然后通过数组的长度来获取字节长度。
const str = "你好,世界!";
const encoder = new TextEncoder();
const bytes = encoder.encode(str);
console.log(bytes.length); // 输出字节长度
如果需要兼容不支持TextEncoder
的环境,可以手动计算字符串的字节长度。基本思路是遍历字符串中的每个字符,根据字符的Unicode码点来判断其UTF-8编码下的字节数。
function getByteLength(str) {
let byteLength = 0;
for (let i = 0; i < str.length; i++) {
const code = str.charCodeAt(i);
if (code <= 0x7F) {
byteLength += 1;
} else if (code <= 0x7FF) {
byteLength += 2;
} else if (code >= 0xD800 && code <= 0xDFFF) {
// 处理代理对(surrogate pair),表示Unicode中的高位字符
i++; // 跳过下一个代码单元
byteLength += 4;
} else {
byteLength += 3;
}
}
return byteLength;
}
const str = "你好,世界!";
console.log(getByteLength(str)); // 输出字节长度
通过以上方法,你可以准确地查询JavaScript中字符串的字节长度,并根据具体需求选择合适的方法。
领取专属 10元无门槛券
手把手带您无忧上云