可能重複:
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