Дополнительный Unicode-символ не помещается в одну четырёхзначную последовательность \u. JSON записывает его двумя единицами UTF-16 корректной суррогатной пары.
Корректная пара
Введите `"caf\u00e9 \ud83d\ude00"`, выберите однократное декодирование и строку JSON в кавычках. Результат: `café 😀`. Первая последовательность \u обозначает é в основном многоязычном плане. Соседние старший суррогат `\ud83d` и младший `\ude00` объединяются в один символ U+1F600. EscapeJSON учитывает три escape-последовательности, но эмодзи считается одной кодовой точкой Unicode в результате.
Некорректный одиночный суррогат
Затем попробуйте `"\ud83d"` или `"\ude00"`. EscapeJSON вернёт UNPAIRED_SURROGATE без частичного результата. RFC 8259 предупреждает, что одиночные суррогатные escape-последовательности дают непредсказуемое поведение разных реализаций, включая различную длину строки или ошибки выполнения. Отказ сохраняет совместимый Unicode, не подставляя символ замены и не пропуская повреждённый UTF-16.
Проверьте назначение и число слоёв
Сверяйте результат с контрактами источника и назначения. Экранирование защищает только грамматику одной строки JSON и не санитизирует HTML, SQL, JavaScript, командную оболочку или другой синтаксический анализатор. Снимайте по одному проверенному слою, отклоняйте повреждённый Unicode и сохраняйте известный тестовый пример для важных интеграций.