Читать «Архитектура компьютера» онлайн - страница 137

Эндрю Таненбаум

UTF-8

Стандарт Unicode был лучше ASCII, но со временем в нем тоже возникла нехватка кодовых пунктов. Кроме того, он требовал 16 бит для представления «чистого» ASCII-текста, что было расточительно. Для решения этих проблем была разработана новая схема кодирования UTF-8 UCS Transformation Format. Сокращение UCS в названии означает «Universal Character Set» — по сути это Unicode. Коды UTF-8 имеют переменную длину от 1 до 4 байт, и позволяют кодировать до двух миллиардов символов. Этот способ кодировки сейчас доминирует в World Wide Web.

Одно из преимуществ UTF-8 заключается в том, что коды от 0 до 127 используются для представления ASCII-символов. Таким образом, одному символу соответствует один байт (вместо двух байтов в Unicode). Для символов, не входящих в набор ASCII, старший бит первого байта устанавливается в 1; это означает, что за ним следуют один и более дополнительных байтов. Всего используются шесть разных форматов, представленных в табл. 2.5. Биты с пометкой «d» являются битами данных.

Таблица 2.5. Схема кодирования UTF-8
Биты Байт 1 Байт 2 Байт 3 Байт 4 Байт 5 Байт 6
7 0ddddddd
11 110ddddd 10dddddd
16 1110dddd 10dddddd 10dddddd
21 11110ddd 10dddddd 10dddddd 10dddddd
26 111110dd 10dddddd 10dddddd 10dddddd 10dddddd
31 1111110x 10dddddd 10dddddd 10dddddd 10dddddd 10dddddd

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

Обычно UTF-8 используется для кодирования только 17 плоскостей Unicode, хотя схема позволяет представить много более 1 114 112 кодовых пунктов. Но если антропологи найдут где-нибудь в Новой Гвинее племя с неизвестным языком (или мы вступим в контакт с инопланетными цивилизациями), UTF-8 успешно справится с представлением их алфавитов или идеограмм.

Краткое содержание главы

Компьютерные системы состоят из трех компонентов: процессоров, памяти и устройств ввода-вывода. Назначение процессора заключается в том, чтобы последовательно вызывать команды из памяти, декодировать и выполнять их. Цикл выборка — декодирование — выполнение всегда можно представить в виде алгоритма. Выборка, декодирование и выполнение команд определенной программы иногда выполняется программой-интерпретатором, работающей на более низком уровне. Для повышения быстродействия во многих компьютерах имеется один или несколько конвейеров или поддерживается суперскалярная архитектура с несколькими функциональными блоками, которые действуют параллельно. Конвейер позволяет разбивать команды на отдельные шаги, с одновременным выполнением шагов разных команд.