Node.js:String中有多少位?

时间:2011-12-21 10:35:11

标签: javascript string node.js

  

可能重复:
  How many bytes in a JavaScript string?
  String length in bytes in JavaScript

如何计算字符串中的位数? 实际上我需要的是JavaScript(V8)字符串中有多少个八位字节(8位字节)? 如果不可能知道,是否还有其他字符数据结构可以在这里使用而不是String?

更新:用于UTF-8编码

1 个答案:

答案 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个字节,并且不应该找到代理 在一对之外。