以下は正しくないようです
"".charCodeAt(0); // returns 55357 in both Firefox and Chrome
これは ROCKET (U+1F680) という名前の Unicode 文字で、10 進数は 128640 である必要があります。
これは、書いているユニコードアプリ用です。Unicode 6 のすべての文字ではなく、ほとんどの文字がすべて 55357 でスタックしているようです。
どうすれば修正できますか?ありがとう。
以下は正しくないようです
"".charCodeAt(0); // returns 55357 in both Firefox and Chrome
これは ROCKET (U+1F680) という名前の Unicode 文字で、10 進数は 128640 である必要があります。
これは、書いているユニコードアプリ用です。Unicode 6 のすべての文字ではなく、ほとんどの文字がすべて 55357 でスタックしているようです。
どうすれば修正できますか?ありがとう。
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 ドキュメントにあります。
これを試してみました:
> "".charCodeAt(0);
55357
> "".charCodeAt(1);
56960
SO に関する関連する質問:
あなたもこれを見たいと思うかもしれません:
その文字の最初のコード単位 UTF-16 エンコーディングを返しているからだと思います。16 ビット値を返すため、できることはあまりありません。おそらく、最初の 2 つのコード単位から文字を手動でデコードしてから、UTF-32 でエンコードしてみてください。あなたが欲しいもの。