17

以下は正しくないようです

"".charCodeAt(0);  // returns 55357 in both Firefox and Chrome

これは ROCKET (U+1F680) という名前の Unicode 文字で、10 進数は 128640 である必要があります。

これは、書いているユニコードアプリ用です。Unicode 6 のすべての文字ではなく、ほとんどの文字がすべて 55357 でスタックしているようです。

どうすれば修正できますか?ありがとう。

4

3 に答える 3

10

JavaScript は UTF-16 エンコーディングを使用しています。詳細については、この記事を参照してください。

センター () の U+1D306 テトラグラムなど、BMP の外側の文字は、2 つの 16 ビット コード単位 (0xD834 0xDF06) を使用して UTF-16 でのみエンコードできます。これをサロゲート ペアと呼びます。サロゲート ペアは 1 文字のみを表すことに注意してください。

サロゲート ペアの最初のコード ユニットは常に 0xD800 から 0xDBFF の範囲にあり、上位サロゲートまたはリード サロゲートと呼ばれます。

サロゲート ペアの 2 番目のコード ユニットは常に 0xDC00 から 0xDFFF の範囲にあり、ロー サロゲートまたはトレイル サロゲートと呼ばれます。

次のようにサロゲート ペアをデコードできます。

codePoint = (text.charCodeAt(0) - 0xD800) * 0x400 + text.charCodeAt(1) - 0xDC00 + 0x10000

完全なコードはcharCodeAt の Mozilla ドキュメントにあります。

于 2013-03-03T02:40:29.780 に答える
5

これを試してみました:

> "".charCodeAt(0);
55357

> "".charCodeAt(1);
56960

SO に関する関連する質問:

あなたもこれを見たいと思うかもしれません:

于 2013-03-03T02:36:33.697 に答える
0

その文字の最初のコード単位 UTF-16 エンコーディングを返しているからだと思います。16 ビット値を返すため、できることはあまりありません。おそらく、最初の 2 つのコード単位から文字を手動でデコードしてから、UTF-32 でエンコードしてみてください。あなたが欲しいもの。

于 2013-03-03T02:34:27.270 に答える