可能重复:
How many bytes in a JavaScript string?
String length in bytes in JavaScript
如何计算字符串中的位数? 实际上我需要的是JavaScript(V8)字符串中有多少个八位字节(8位字节)? 如果不可能知道,是否还有其他字符数据结构可以在这里使用而不是String?
更新:用于UTF-8编码
答案 0 :(得分:3)
假设您只使用BMP字符:
/* Compute length of UTF-8 serialization of string s. */
function utf8Length(s)
{
var l = 0;
for (var i = 0; i < s.length; i++) {
var c = s.charCodeAt(i);
if (c <= 0x007f) l += 1;
else if (c <= 0x07ff) l += 2;
else if (c >= 0xd800 && c <= 0xdfff) l += 2; // surrogates
else l += 3;
}
return l;
}
如果你退出BMP(即使用0xffff以上的字符),事情会变得更复杂,因为它们会在JavaScript中被视为代理对,而你必须识别...
更新:我更新了代码,使其适用于所有Unicode, 不仅是BMP。 但是,这段代码现在依赖于一个强有力的假设:给定的 string是正确的 UTF-16。它通过计算每个的两个字节来工作 在字符串中找到的代理人。事实是代理对 在UTF-8中被编码为4个字节,并且不应该找到代理 在一对之外。