ノードのバージョンは 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)
ここでは、2 つの可能性があります。
Buffer.byteLength()
UNICODE バイト数を返します。例: Unicode¡
は 0xA1 (1 バイト) です。これが true の場合、関数は 2 を返すためバグが発生しています (実際の長さは 2 です)。Buffer.bytelength()
REAL バイト数を返します。例: の実際の 16 進値は 0xF0A481A5 (4 バイト) です。これが true の場合、関数は 3 を返すためバグが発生しています (Unicode の長さは 3)。
どう思いますか?機能にバグがありますか?