2

节点版本为 0.6.17。

我试图获取字符的字节数(SO question),但现在我正在测试如何获取真实的字节数。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)。

你怎么看?功能有问题吗?

4

1 回答 1

1

解决了:

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

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

该函数返回 REAL 长度,因此示例 1、2、3 正确,示例 4 错误。

于 2012-05-13T16:34:46.460 回答