Node.js:一个string有多less位?

可能重复:
JavaScriptstring中有多less个字节?
JavaScript中的string长度(字节)

我怎样才能计算一个string有多less位? 其实我需要的是在一个JavaScript(V8)string中有多less八位字节(8位字节)? 如果不可能知道,有没有其他字符的数据结构,可以在这里有所帮助,而不是string?

更新:用于UTF-8编码

假设你只使用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。 它通过计算每个在string中find的代理的两个字节来工作。 事实上,代理在UTF-8中被编码为4个字节,并且在对之外不应find代理。