UTF-8
Материал из Википедии — свободной энциклопедии
UTF-8 (от англ. Unicode Transformation Format — формат преобразования Юникода) — в настоящее время распространённая кодировка, реализующая представление Юникода, совместимое с 8-битным кодированием текста.
Текст, состоящий только из символов с номером меньше 128, при записи в UTF-8 превращается в обычный текст ASCII. И наоборот, в тексте UTF-8 любой байт со значением меньше 128 изображает символ ASCII с тем же кодом. Остальные символы Юникода изображаются последовательностями длиной от 2 до 6 байтов (реально только до 4 байт, поскольку использование кодов больше 221 не планируется), в которых первый байт всегда имеет вид 11xxxxxx
, а остальные — 10xxxxxx
.
Проще говоря, в формате UTF-8 символы латинского алфавита, знаки препинания и управляющие символы ASCII записываются кодами US-ASCII, a все остальные символы кодируются при помощи нескольких октетов со старшим битом 1. Это приводит к двум эффектам.
- Даже если программа не распознаёт Юникод, то латинские буквы, арабские цифры и знаки препинания будут отображаться правильно.
- В случае, если латинские буквы и простейшие знаки препинания (включая пробел) занимают существенный объём текста (например, в европейских языках, включая основанные на кириллице), UTF-8 даёт выигрыш по объёму по сравнению с UTF-16.[1][2]
- На первый взгляд может показаться, что UTF-16 удобнее, так как в ней большинство символов кодируется ровно двумя байтами. Однако это сводится на нет необходимостью поддержки суррогатных пар, о которых часто забывают при использовании UTF-16, реализовывая лишь поддержку символов UCS-2.[1]
- Работа с UTF-8 может требовать немного больше процессорных ресурсов, так как UTF-8 является кодировкой UTF-16, а не кодировкой непосредственно Юникода.
Формат UTF-8 был изобретён 2 сентября 1992 года Кеном Томпсоном и Робом Пайком и реализован в Plan 9[3]. Сейчас стандарт UTF-8 официально закреплён в документах RFC 3629 и ISO/IEC 10646 Annex D.
Символы UTF-8 получаются из Unicode следующим образом:
Unicode | UTF-8 |
---|---|
0x00000000 — 0x0000007F |
0xxxxxxx |
0x00000080 — 0x000007FF |
110xxxxx 10xxxxxx |
0x00000800 — 0x0000FFFF |
1110xxxx 10xxxxxx 10xxxxxx |
0x00010000 — 0x001FFFFF |
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
Также теоретически возможны, но не включены в стандарты:
Unicode | UTF-8 |
---|---|
0x00200000 — 0x03FFFFFF |
111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx |
0x04000000 — 0x7FFFFFFF |
1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx |
Замечание: Символы, закодированные в UTF-8, могут быть длиной до шести байтов, однако стандарт Unicode не определяет символов выше 0x10ffff
, поэтому символы Unicode могут иметь максимальный размер в 4 байта в UTF-8.
[править] Примечания
- ↑ 1 2 Well, I'm Back (2008-03-01) String Theory(англ.) Robert O'Callahan Проверено 2008-03-01 г.
- ↑ Ростислав Чебыкин Всем кодировкам кодировка. UTF‑8: современно, грамотно, удобно. HTML и CSS Проверено 2008-03-01 г.
- ↑ http://www.cl.cam.ac.uk/~mgk25/ucs/utf-8-history.txt (англ.)