Buffer.byteLength()被窃听

节点版本是0.6.17。

我试图得到一个字符的字节数( SO问题 ),但现在我正在testing如何获得实际的字节数。 REAL数字表示如果char的值大于127,则必须使用前导额外字节( UTF8 wiki )进行编码。

请参见:

console.log (Buffer.byteLength ("a", "utf8")); //bytes: 1, UNICODE hex: 0x61 (1), REAL hex: 0x61 (1) console.log (Buffer.byteLength ("¡", "utf8")); //bytes: 2, UNICODE hex: 0xA1 (1), REAL hex: 0xC2A1 (2) console.log (Buffer.byteLength ("↑", "utf8")); //bytes: 3, UNICODE hex: 0x2191 (2), REAL hex: 0xE28691 (3) console.log (Buffer.byteLength ("𤁥", "utf8")); //bytes: 3, UNICODE hex: 0x24065 (3), REAL hex: 0xF0A481A5 (4) 

这里我们有两种可能性:

  1. Buffer.byteLength()返回UNICODE的字节数。 例如: ¡ Unicode是0xA1(1字节)。 如果这是真的,那么该函数被窃听,因为它返回2(实际长度是2)。
  2. Buffer.bytelength()返回REAL字节数。 例如:Real的实数hex值是0xF0A481A5(4个字节)。 如果这是真的,那么该函数被窃听,因为它返回3(unicode长度是3)。

你怎么看? 函数是否被窃听?

解决了:

https://github.com/joyent/node/issues/3262#issuecomment-5677385

node.js版本6仅支持BMP字符集(0x0000 – 0xFFFF)。 版本7及以上版本支持大于0xFFFF的字符(未经testing)。

该函数返回REAL长度,所以示例1,2和3是正确的,4是不正确的。