Схема кодирования совместимости для UTF-16: 8-бит ( CESU-8 ) — это вариант UTF-8 , описанный в Техническом отчете Unicode № 26. [1] Кодовая точка Unicode из Базовой многоязыковой плоскости (BMP), т. е. кодовая точка в диапазоне от U+0000 до U+FFFF, кодируется так же, как в UTF-8. Дополнительный символ Unicode, т. е. кодовая точка в диапазоне от U+10000 до U+10FFFF, сначала представляется в виде суррогатной пары, как в UTF-16 , а затем каждая суррогатная кодовая точка кодируется в UTF-8. Таким образом, CESU-8 требует шесть байтов (3 байта на суррогат) для каждого дополнительного символа Unicode, тогда как UTF-8 требует только четыре. Хотя это и не указано в техническом отчете, непарные суррогаты также кодируются как 3 байта каждый, а CESU-8 — это то же самое, что и применение старого преобразователя UCS-2 в UTF-8 к данным UTF-16.
Кодировка символов Unicode, отличных от BMP, выглядит так 11101101 1010yyyy 10xxxxxx 11101101 1011xxxx 10xxxxxx
(yyyy представляет собой верхние пять бит символа минус один). Байтовые значения 0xF0—0xF4 не будут отображаться в CESU-8, поскольку они начинают 4-байтовые кодировки, используемые UTF-8.
CESU-8 не является официальной частью стандарта Unicode, поскольку технические отчеты Unicode являются исключительно информационными документами. [2] Он должен использоваться исключительно для внутренней обработки и никогда для внешнего обмена данными.
Поддержка CESU-8 в HTML- документах запрещена стандартами HTML W3C [3] [4] и WHATWG [5] , поскольку это приведет к уязвимости межсайтового скриптинга . [6]
Модифицированный UTF-8 в Java — это CESU-8 со специальным сверхдлинным кодированием символа NUL (U+0000) в виде двухбайтовой последовательности C0 80
. [7]
База данных Oracle использует CESU-8 для своего набора символов "UTF8". Стандартный UTF-8 может быть получен с помощью набора символов " AL32UTF8 " (начиная с версии Oracle 9.0).
Кодовая точка | U+0045 | У+0205 | U+10400 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Характер | Э | ȅ | 𐐀 | ||||||||||||
UTF-8 | 45 | С8 | 85 | Ф0 | 90 | 90 | 80 | ||||||||
UTF-16 | 0045 | 0205 | Д801 | DC00 | |||||||||||
CESU-8 | 45 | С8 | 85 | ЭД | А0 | 81 | ЭД | В0 | 80 |