Особенности обработки суррогатных пар в Unicode заключаются в том, что для кодирования одного символа используются две кодовые пары (4 байта). github.com Это необходимо для символов, находящихся за пределами базового диапазона Unicode. github.com
Некоторые особенности обработки суррогатных пар:
- Специальный диапазон кодов. github.com Для суррогатных пар в таблице Unicode отведён диапазон от D800 до DFFF. github.com Если при преобразовании кодовой пары из байтового вида в шестнадцатеричный получается число из этого диапазона, то это суррогатная пара. github.com
- Алгоритм кодирования. github.com Чтобы закодировать символ из диапазона 10000–10FFFF, нужно выполнить следующие шаги: github.com
- Из кода символа вычесть 10000 (шестнадцатеричное). github.com
- Получить число не больше FFFFF, занимающее до 20 бит. github.com
- Ведущие 10 бит из полученного числа суммировать с D800 (начало диапазона суррогатных пар в Unicode). github.com
- Следующие 10 бит суммировать с DC00 (тоже число из диапазона суррогатных пар). github.com
- Получить две суррогатные пары по 16 бит. github.com Первые 6 бит в каждой такой паре отвечают за определение того, что это суррогат, а десятый бит в каждом суррогате отвечает за его порядок: если это 1, то это первый суррогат, если 0, то второй. github.com
Части суррогатной пары не имеют никакого значения друг без друга. learn.javascript.ru