Представление Юникода.
Эта страница является продолжением статьи "Что такое Unicode?"
Суть проблемы:
Проблема 16-битных реализаций.

Первая версия Юникода использовала 16-битные символы, т. е. общее число кодов было 216 (65 536). При этом в Юникоде планировалось кодировать не все существующие символы, а только те, которые необходимы в повседневном обиходе. В дальнейшем, однако, было принято решение расширить кодовую область до 220+216 (1 114 112). Но поскольку многие компьютерные системы продолжали поддерживать только 16-битные символы, было решено всё наиболее важное кодировать только в пределах первых 65 536 позиций (т. н. basic multilingual plane). Остальное было отведено для «экзотики» (например, систем письма вымерших языков или очень редко используемых китайских иероглифов).

Для улучшения совместимости со старыми 16-битными системами была изобретена система UTF-16, где первые 65 536 позиций отображаются непосредственно как 16-битные числа, а остальные представляются в виде «суррогатных пар» (первый элемент пары из области U+D800…U+DBFF, второй элемент пары из области U+DC00…DFFF).

Порядок байтов.

В эависимости от порядка расположения байтов микропроцессором, в потоке данных UTF-16 старший байт (MSB) может записываться либо перед младшим (UTF-16 Big Endian, от big end-ian — большим концом), либо после младшего (UTF-16 Little Endian, от little end-ian — малым концом). К первой категории относятся, например, процессоры Motorola 68K и Sun SPARC. Ко второй категории относятся, например, Intel 80x86 и MIPS. Вопреки логике, кодировку Юникода Big Endian (UTF-16BE) иногда называют Юникодом с обратным порядком байтов. Аналогично существует два варианта четырёхбайтной кодировки — UTF-32BE и UTF-32LE.

Для указания кодировки текста в Юникоде используется соглашение, по которому в начале текста записывается символ U+FEFF (неразрывный пробел с нулевой шириной), также именуемый меткой порядка байтов (англ. Byte Order Mark, BOM). Поскольку символа U+FFFE не существует, это позволяет определить кодировку текста. Документы, следующие этой конвенции начинаются с такой последовательности байтов:

UTF-8
UTF-16BE
FE FF
EF BB BF
UTF-16LE
FF FE
UTF-32BE
00 00 FE FF
UTF-32LE
FF FE 00 00

К сожалению, эта мера не даёт возможности различать UTF-16LE и UTF-32LE, поскольку U+0000 является легальным символом (хотя реальные тексты редко начинаются с него).

Что такое UTF-8?

UTF-8 (от англ. Unicode Transformation Format, формат преобразования Юникода) — это представление Юникода, обеспечивающее наилучшую совместимость со старыми системами, использовавшими 8-битные символы. Текст, состоящий только из символов с номером меньше 128, при записи в UTF-8 превращается в обычный текст ASCII. И наоборот, в тексте UTF-8 любой байт со значением меньше 128 изображает символ ASCII с тем же кодом. Остальные символы Юникода изображаются последовательностями длиной от 2 до 6 байтов (реально только до 4 байт, поскольку использование кодов больше 221 не планируется), в которых первый байт всегда имеет вид 11xxxxxx, а остальные — 10xxxxxx.

Проще говоря, в формате UTF-8 символы латинского алфавита, знаки препинания и управляющие символы записываются кодами US-ASCII, a все остальные символы кодируются в Юникоде. В результате, даже если программа не распознаёт Юникод, то английский язык и разметка всё равно будут отображаться правильно. UTF-8 часто называют переходным (от ASCII к Юникоду) форматом.

Формат UTF-8 был изобретён 2 сентября 1992 года Кеном Томпсоном и Робом Пайком. Сейчас стандарт 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
(теоретически возможны, но не включены в стандарт также:)
0x00200000 — 0x03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
0x04000000 — 0x7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

Обратите внимание на то, что хотя UTF-8 позволяет указать один и тот же символ несколькими способами, только наиболее короткий из них правильный. Остальные формы должны отвергаться по соображениям безопасности.

Нужен оригинальный шрифт?
Нет проблем - fontproblem@yandex.ru
Hosted by uCoz