节点版本为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)
我们有两种可能性:
Buffer.byteLength()
返回UNICODE字节数。示例:¡
的Unicode为0xA1(1个字节)。如果这是真的,那么函数会被窃听,因为它返回2(实际长度为2)。Buffer.bytelength()
返回REAL字节数。示例:
的实际十六进制值为0xF0A481A5(4个字节)。如果这是真的,则该函数被窃听,因为它返回3(unicode长度为3)。答案 0 :(得分:1)
解决:
https://github.com/joyent/node/issues/3262#issuecomment-5677385
node.js版本6仅支持BMP字符集(0x0000 - 0xFFFF)。版本7及更高版本支持大于0xFFFF(未测试)的字符。
该函数返回REAL长度,因此示例1,2,3是正确的,4是不正确的。