Суррогатная пара

Encoding & Standards

Два кодовых блока UTF-16 (старший суррогат U+D800–U+DBFF, за которым следует младший суррогат U+DC00–U+DFFF), совместно представляющих символ выше U+FFFF.

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
Кодировка Unicode переменной ширины, использующая 2 или 4 байта на символ; применяется внутри JavaScript, Java и Windows.
Дополнительная многоязыковая плоскость (SMP) Дополнительная многоязыковая плоскость (SMP)
Плоскость 1 Unicode (U+10000 — U+1FFFF), в которой размещено большинство кодовых точек эмодзи.
Кодовый блок Кодовый блок
Минимальная битовая комбинация, используемая для кодирования символа: 8 бит для UTF-8, 16 бит для UTF-16 и 32 бита для UTF-32.
Плоскость Плоскость
Группа из 65 536 последовательных кодовых точек Unicode. Плоскость 0 — базовая многоязыковая плоскость (BMP); большинство эмодзи находятся в плоскости 1 (SMP).

Похожие инструменты

🔢 Поиск в Unicode Поиск в Unicode
Введите кодовую точку, например U+1F600, и получите эмодзи, сведения о кодировке, байты UTF-8/16 и HTML-сущности.
🔍 Анализатор последовательностей Анализатор последовательностей
Декодируйте ZWJ-последовательности, модификаторы тона кожи, последовательности клавиш и пары флагов в отдельные компоненты.