Unicode escape-послідовність виду \u0041 — це спосіб записати символ Unicode через його код, використовуючи лише ASCII-символи. У прикладі \u0041 відповідає літері «A» (код 0x41 у шістнадцятковій системі).
Навіщо потрібні escape-послідовності
Не всі текстові формати чи канали передачі коректно працюють з довільними символами Unicode «як є» — деякі очікують лише ASCII або мають обмеження кодування. Escape-послідовність дозволяє записати будь-який символ Unicode, включно з ієрогліфами чи емодзі, використовуючи виключно базові латинські літери й цифри.
JSON і escape-послідовності
Специфікація JSON дозволяє екранувати будь-який символ рядка через \uXXXX. Це часто трапляється, коли дані генеруються програмно й серіалізатор навмисно уникає символів поза ASCII для сумісності — тоді замість «Привіт» у JSON можна побачити послідовність з шести-семи escape-кодів.
Символи поза базовою площиною (emoji)
У JavaScript рядки внутрішньо представлені в UTF-16, тому символи за межами базової багатомовної площини (наприклад, більшість emoji) кодуються не одним, а двома escape-кодами — сурогатною парою виду \ud83d\ude00. Це нормальна поведінка, а не помилка кодування.
Коли це потрібно
- Прочитати «людською мовою», який текст ховається за escape-послідовностями в JSON-відповіді API.
- Підготувати рядок для середовища, що не приймає символи поза ASCII.
- Діагностувати проблеми з кодуванням при роботі з зовнішніми даними.
Поширена помилка: розбита сурогатна пара
Якщо обрізати рядок або обробляти escape-коди по одному без урахування сурогатних пар, можна відокремити перший код пари від другого. Результат — некоректний символ-«сирота» (наприклад, самотній \ud83d без парного \ude00), який більшість парсерів або відхилять з помилкою, або відобразять як символ-заглушку «�».