UTF-16 і сурогатні пари
Коротко: UTF-16 зберігає символи Unicode в 16-бітних одиницях. Символи за межами перших 65 536 потребують двох одиниць — сурогатної пари.
Докладніше: Java, JavaScript, C# і Windows усередині використовують UTF-16. Тому довжина рядка там часто не дорівнює кількості видимих символів.
Подробиці
- Базова площина (BMP): Кодові точки U+0000–U+FFFF займають одну одиницю.
- Сурогатна пара: Кодова точка від U+10000 (багато емодзі) розбивається на старшу (D800–DBFF) і молодшу одиницю (DC00–DFFF).
- Наслідок:
"😀".lengthу JavaScript дорівнює 2. Якщо розрізати посеред пари, вийде недопустимий символ.Array.from(s)чиfor…ofпрацюють за кодовими точками. - Порядок байтів: UTF-16LE і UTF-16BE, часто з BOM (byte order mark) на початку файлу.
- Порівняно з UTF-8: UTF-8 сумісний з ASCII і є стандартом вебу. UTF-16 майже нічого не заощаджує для більшості текстів CJK.
- Ще тонше: Один видимий символ може складатися з кількох кодових точок (кластери графем, наприклад прапори чи емодзі з відтінком шкіри).
Див. також: UTF-8 і кодування символів