可能重复:
How many bytes in a JavaScript string?
String length in bytes in JavaScriptNode.js:字符串中有多少位?
我如何计算在一个字符串有多少位? 其实我需要的是JavaScript(V8)字符串中有多少个八位字节(8位字节)? 如果不可能知道,有没有其他字符数据结构可以在这里有所帮助,而不是字符串?
UPDATE:为UTF-8编码
可能重复:
How many bytes in a JavaScript string?
String length in bytes in JavaScriptNode.js:字符串中有多少位?
我如何计算在一个字符串有多少位? 其实我需要的是JavaScript(V8)字符串中有多少个八位字节(8位字节)? 如果不可能知道,有没有其他字符数据结构可以在这里有所帮助,而不是字符串?
UPDATE:为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中看作代理对,您必须标识...
更新:我更新了代码,以便它可以与所有的Uni代码, 不仅BMP。然而,这个代码现在依赖于一个强有力的假设:给定的 字符串是正确的 UTF-16。它通过计算在字符串中找到的每个 代理的两个字节来计算。事实是代理对 被编码为UTF-8中的4个字节,并且在对之外不应找到替代物 。
你能解释一下'0x007f'是什么?它代表什么? – user1109648 2011-12-21 14:03:58
0x007f在十六进制中为127:这是ASCII码的上限,Unicode编码的最高编码为UTF-8中的单个字节。 0x07ff是编码为两个字节的最高编码点。参见[Wikipedia:UTF-8](http://en.wikipedia.org/wiki/Utf8)。 – 2011-12-21 14:28:35
你究竟想要完成什么? – 2011-12-21 10:38:35
我想将它作为http响应主体发送回浏览器,我需要知道内容长度,我不想使用'http'模块。 – user1109648 2011-12-21 11:01:10
取决于字符集和编码。如果它是ASCII,则以ASCII形式传输,然后每个字符一个字节。如果它的Unicode以UTF-8格式传输,那么......你需要做一些计算! – 2011-12-21 11:46:28