Buffer.byteLength()被窃听

时间:2012-05-13 13:43:13

标签: node.js

节点版本为0.6.17。

我试图获取字符(SO question)的字节数,但现在我正在测试如何获得REAL字节数。 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字节数。示例:的实际十六进制值为0xF0A481A5(4个字节)。如果这是真的,则该函数被窃听,因为它返回3(unicode长度为3)。
  3. 你怎么看?该功能是否被窃听?

1 个答案:

答案 0 :(得分:1)

解决:

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

node.js版本6仅支持BMP字符集(0x0000 - 0xFFFF)。版本7及更高版本支持大于0xFFFF(未测试)的字符。

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