RFC 9839 and Bad Unicode
RFC 9839 и плохой Unicode
Unicode хорош, но не все его символы. Часто приходится исключать «проблемные». Чтобы формализовать это, мы с Полом Хоффманом написали черновик, и теперь он стал RFC 9839 — всего 10 страниц, читайте, если проектируете текстовые поля.
Пример боли: JSON-поле username
может содержать:
U+0000
— нулевой байт, ломает языки;U+0089
— устаревший C1-контрол «HTJ»;U+DEAD
— несвязанный суррогат, запрещён в UTF-8;U+7FFFF
— «noncharacter», не должен передаваться.
RFC 9839 перечисляет такие категории и предлагает три готовых подмножества, которые можно просто запретить.
Не вините Дуга Крокфорда: JSON создавался раньше, когда Unicode был молод. Но теперь нужен способ явно сказать «эти символы не нужны».
PRECIS (RFC 8264, 2002) уже решал похожую задачу, но 43 страницы сложностей и привязка к конкретной версии Unicode мешают внедрению. RFC 9839 проще и тупее — и, возможно, именно поэтому пригодится.