Формы представления Юникода
Формы представления Юникода (англ. Unicode Transformation Formats) реализуют последовательность кодовых позиций (и, как следствие, текст) в виде, понимаемом программным обеспечением. Главными из них являются две: UTF-8[⇨] (кодирование 8-битными кодами) и UTF-16[⇨] (кодирование 16-битными кодовыми единицами). Однако, поскольку октеты (в просторечии: байты) являются de facto стандартной формой цифровой информации, а 16-битное слово занимает два октета, UTF-16 реализуется в двух разновидностях: UTF-16BE и UTF-16LE.
UTF-8[править]
UTF-8 является самосинхронизированным префиксным кодом, кодирующим каждую из кодовых позицию Юникода последовательностью от 1 до 4 байт (октетов). 128 символов ASCII кодируются как есть, а каждый из следующих 1920 символов Юникода требует в UTF-8 два байта. Оставшиеся в BMP кодовые позиции преобразуются в трёхбайтные коды, а символы других кодовых плоскостей Юникода требуют по четыре байта каждый. Длина кодовой последовательности однозначно определяется значением её ведущего (первого) октета. Таблица показывает, как UTF-8 использует каждое из 128 возможных значений октета с 1 в старшем бите.
_0 | _1 | _2 | _3 | _4 | _5 | _6 | _7 | _8 | _9 | _A | _B | _C | _D | _E | _F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
8_ | +00 | +01 | +02 | +03 | +04 | +05 | +06 | +07 | +08 | +09 | +0A | +0B | +0C | +0D | +0E | +0F |
9_ | +10 | +11 | +12 | +13 | +14 | +15 | +16 | +17 | +18 | +19 | +1A | +1B | +1C | +1D | +1E | +1F |
A_ | +20 | +21 | +22 | +23 | +24 | +25 | +26 | +27 | +28 | +29 | +2A | +2B | +2C | +2D | +2E | +2F |
B_ | +30 | +31 | +32 | +33 | +34 | +35 | +36 | +37 | +38 | +39 | +3A | +3B | +3C | +3D | +3E | +3F |
C_ | (2) 0000 |
(2) 0040 |
C1, лат. 0080 |
лат. 00C0 |
лат. Extd-A 0100 |
лат. Extd-A 0140 |
лат. Extd-B 0180 |
лат. Extd-B 01C0 |
лат. Extd-B 0200 |
МФА 0240 |
МФА 0280 |
симв- мод 02C0 |
диакр. 0300 |
диакр. 0340 |
греч. 0380 |
греч. 03C0 |
D_ | кир. 0400 |
кир. 0440 |
кир. 0480 |
кир. 04C0 |
кир. 0500 |
арм. 0540 |
евр. 0580 |
евр. 05C0 |
араб. 0600 |
араб. 0640 |
араб. 0680 |
араб. 06C0 |
Syriac 0700 |
араб. 0740 |
Thaana 0780 |
N'Ko 07C0 |
E_ | Indic 0800 |
? 1000 |
симв. 2000 |
кана 3000 |
CJK 4000 |
CJK 5000 |
CJK 6000 |
CJK 7000 |
CJK 8000 |
CJK 9000 |
Asian A000 |
ханг. B000 |
ханг. C000 |
ханг. D000 |
PUA E000 |
Forms F000 |
F_ | 10000 | 40000 | 80000 | C0000 | 100000 | 140000 | 180000 | 1C0000 | (5) | (5) | (5) | (5) | (6) | (6) |
Байты-продолжения, никогда не начинают кодовую последовательность. Кодируют по 6 бит кода Unicode.
Ведущие байты, обладающие полным набором кодовых последовательностей (комбинаций с нужным количеством байтов-продолжений). Внизу написано (в шестнадцатеричном коде), откуда начинаются кодируемые данным ведущим байтом позиции Юникода. Длина кодовой последовательности равна двум для 0xC_ и 0xD_, трём для 0xE_, и четырём для ведущих байтов 0xF0–0xF4.
Ведущие байты, не допускающие (по разным причинам) все возможные комбинации с нужным количеством байтов-продолжений.
Запрещённые байты. Ведущие байты начиная с 0xF5, теоретически, могут быть использованы в случае расширения кодового пространства (0xF8 и далее потребуют последовательности длиной 5 и более).
На сегодняшний день (2021 год) данная форма является повсеместной во Всемирной паутине. Системы Unix реализуют текстовые файлы в Юникоде почти исключительно в UTF-8.
UTF-16[править]
ст.\мл. | DC00
|
DC01
|
⋯ | DFFF
|
---|---|---|---|---|
D800
|
010000 |
010001 |
⋯ | 0103FF
|
D801
|
010400 |
010401 |
⋯ | 0107FF
|
⋮ | ⋮ | ⋮ | ⋱ | ⋮ |
DBFF
|
10FC00 |
10FC01 |
⋯ | 10FFFF
|
UTF-16 кодирует Юникод 16-битными кодовыми единицами. Адресация «правильно расположенного» в памяти 16-битного слова является довольно «дешёвой» операцией на многих современных вычислительных системах. Коды из BMP занимают одну единицу, все прочие — две, для чего используются зарезервированные «суррогатные» кодовые позиции U+D800–U+DFFF. В последнем случае первым идёт один из 1024 кодов 0xD8…, 0xD9…, 0xDA…, 0xDB…, а вторым — один из 1024 кодов 0xDC…, 0xDD…, 0xDE…, 0xDF…, что даёт возможность закодировать все 220 кодовых позиций Юникода, лежащих за пределами BMP.
Теоретически, UTF-16 может быть более эффективной, чем UTF-8, при кодировании китайского, японского, хинди и некоторых других языков. При применении для языков разметки (таких, как HTML) и прочих компьютерных языков выигрыш в сравнении с UTF-8 редко достигаются, поскольку компьютерные языки вносят в текст много символов ASCII.
Встречается, главным образом, в бинарных файлах (и оперативной памяти) приложений, так или иначе использующих Java или JavaScript. Закодированные в UTF-16LE файлы были в недавнем прошлом частым явлением в Microsoft Windows (с 2019 года Microsoft стала рекомендовать кодировать файлы в UTF-8). Старые версии Microsoft Windows (такие, как Windows NT 4 и Windows 95/98) могли работать только с символами из BMP.
UTF-16BE и UTF-16LE[править]
При выводе данных в файл или передаче по сети 16-битные единицы необходимо преобразовать в восьмибитную форму. Можно сначала записать (передать) старший октет, а затем младший — получается UTF-16BE. Либо обменять старший и младший местами — получается UTF-16LE. Для различения этих двух вариантов UTF-16 иногда используется невидимый символ U+FEFF (англ. byte-order mark), поскольку при смене порядка байт он отображается в зарезервированную кодовую позицию U+FFFE.
CESU-8[править]
Является способом представления UTF-16 (см. выше) в виде, имитирующем 8-битную кодировку. Для текстов, не выходящих за пределы BMP, данная кодировка идентична UTF-8; в остальном отличие заключается в том, что кодовые слова 0xD800–0xDFFF UTF-16 кодируются по той же схеме, что и прочие коды в UTF-8 (таким образом символ, занимающий два кодовых слова UTF-16, займёт шесть октетов). В собственно Юникоде коды U+D800–U+DFFF запрещены к использованию.
GB 18030[править]
Используемая в КНР кодировка, представляющая (подобно UTF-8) символы ASCII как есть, а для остальных вводящая кодовые последовательности из двух или четырёх октетов. Является расширением кодировки GBK (которая, в свою очередь, надстроена над GB 2312). Имеет кодовое пространство даже шире, чем Юникод.
Punycode[править]
Кодирование для коротких строк в Юникоде в форме строк из ограниченного набора ASCII-символов. Применяется в доменных именах.
Сжимающие кодировки[править]
SCSU — оптимизированная (по размеру данных) кодировка Юникода, пригодная для текстов, написанных на одном языке. BOCU-1 — патентованная (компанией IBM) система сжатия текста в Юникоде, якобы более эффективная, чем SCSU. Обе кодировки не могут применяться с HTML, что серьёзно ограничивает их потенциальную применимость.
Устаревшие, экзотические и шуточные формы[править]
Описаны также такие формы, как UTF-32, UTF-7, UTF-1, UTF-EBCDIC, UTF-9 и UTF-18. UTF-32 иногда применяться внутри программ (то есть, в оперативной памяти компьютера).
Кодировки символов | ||
---|---|---|
Основы | Алфавит • текст • набор символов • конверсия | |
Исторические кодировки | Докомп.: | семафорная (Макарова) • Морзе • Бодо • МТК-2 |
Комп.: | 6-битная • УПП • RADIX-50 • EBCDIC ( ДКОИ-8 ) • КОИ-7 • ISO 646 | |
современное 8-битное представление |
символы | ASCII ( управляющие • печатные ) |
8-битные код.стр. | ISO 8859 • кириллица (КОИ-8 • ГОСТ 19768-87 • MacCyrillic) | |
Windows | 1250 • 1251 (кир.) • 1252 • 1253 • 1254 • 1255 • 1256 • 1257 • 1258 • WGL4 | |
IBM & DOS | 437 • 850 • 852 • 855 • 866 «альт.» • МИК • НИИ ЭВМ | |
Многобайтные | Традиционные | DBCS ( GB 2312 ) • HTML |
Unicode | UTF • список символов (кириллица • латиница) | |
Связанные темы | интерфейс пользователя • раскладка клавиатуры • локаль • перевод строки • кракозябры • транслит • нестандартные шрифты |