サロゲートペア

Encoding & Standards

U+FFFFを超える文字を表すために使用される2つのUTF-16コード単位の組み合わせ。上位サロゲート(U+D800〜U+DBFF)と下位サロゲート(U+DC00〜U+DFFF)で構成される。

Characters with code points above U+FFFF cannot fit in a single 16-bit value. UTF-16 solves this by encoding them as two 16-bit values called a surrogate pair. Since most emoji are above U+FFFF, surrogate pairs are extremely common with emoji.

For example, 😀 (U+1F600) becomes the surrogate pair 0xD83D 0xDE00 in UTF-16. The formula: high surrogate = 0xD800 + ((cp - 0x10000) >> 10), low surrogate = 0xDC00 + ((cp - 0x10000) & 0x3FF).

This is why JavaScript's `'😀'.charCodeAt(0)` returns 55357 (0xD83D) — it's returning the high surrogate, not the actual code point.

関連用語

UTF-16 UTF-16
1文字あたり2または4バイトを使用する可変長Unicode符号化方式。JavaScript、Java、Windowsが内部的に使用している。
コード単位 コード単位
文字を符号化するための最小ビット単位。UTF-8では8ビット、UTF-16では16ビット、UTF-32では32ビット。
補助多言語面(SMP) (SMP) 補助多言語面(SMP) (SMP)
Unicode第1面(U+10000からU+1FFFF)。大多数の絵文字コードポイントが割り当てられている領域。
面(プレーン) 面(プレーン)
連続する65,536個のUnicodeコードポイントのグループ。第0面は基本多言語面(BMP)で、ほとんどの絵文字は第1面(SMP)に配置されている。

関連ツール

🔢 Unicode 検索 Unicode 検索
U+1F600 のようなコードポイントを入力すると、対応する絵文字、エンコード詳細、UTF-8/16 バイト、HTML エンティティを確認できます。
🔍 シーケンスアナライザー シーケンスアナライザー
ZWJ シーケンス、肌の色の修飾子、キーキャップシーケンス、国旗のペアを個別のコンポーネントに分解します。