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)

ここでは、2 つの可能性があります。

  1. Buffer.byteLength()UNICODE バイト数を返します。例: Unicode¡は 0xA1 (1 バイト) です。これが true の場合、関数は 2 を返すためバグが発生しています (実際の長さは 2 です)。
  2. Buffer.bytelength()REAL バイト数を返します。例: の実際の 16 進値は 0xF0A481A5 (4 バイト) です。これが true の場合、関数は 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 に答える