Представление Юникода. |
Эта страница является продолжением статьи "Что такое 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-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 Обратите внимание на то, что хотя UTF-8 позволяет указать один и тот же символ несколькими способами, только наиболее короткий из них правильный. Остальные формы должны отвергаться по соображениям безопасности. |
Нужен оригинальный шрифт? |
Нет проблем - fontproblem@yandex.ru |