2.2. Основные принципы

Эта статья является вольным пересказом раздела «2.2. Unicode Design Principes» Стандарта Юникода.

Дизайн стандарта отражает 10 фундаментальных принципов.

  • Универсальность
  • Эффективность
  • Ориентация на символы, а не на глифы
  • Семантика
  • Простой текст
  • Логические порядок
  • Унификация
  • Динамическая композиция
  • Стабильность
  • Совместимость

Не все из этих принципов могут быть одновременно удовлетворены. Стандарт старается найти баланс между согласованностью и эффективностью с одной стороны и совместимостью с существующими стандартами с другой.

Универсальность

Стандарт кодирует единый, очень большой набор символов (Universal Character Set, UCS), охватывая все символы, которые требуются для общемирового использования. Их достаточно для текстового представления всех современных письменностей, а также для исторических систем письма.

Несмотря на поставленную задачу универсальности, в Юникод не включаются письменности о которых нет достаточных данных для чёткого и надёжного кодирования, а также системы письма не являющиеся в своей основе текстовыми.

Универсальный набор символов предоставляет большое количество семантических данных. С их помощью можно реализовать сложные операции по обработке текста.

Эффективность

Стандарт Юникода разрабатывается таким образом, чтобы сделать возможным эффективную реализацию алгоритмов. Здесь нет экранированных последовательностей, состояний и тому подобного. Каждый символ имеет тот же статус, что и любой другой и все коды одинаково доступны.

Все формы кодирования являются само-синхронизирующимися и не перекрывающимися. Благодаря этому становится эффективным случайный доступ и поиск внутри потока символов.

Символы конкретных письменностей группируются вместе настолько, насколько это возможно. Кроме всего прочего это позволяет делать алгоритмы более компактными и реализовывать более эффективные методы сжатия.

Общие знаки препинания кодируются едиными символами. Символы форматирования имеют конкретные и однозначные функции.

Символы, а не глифы

Стандарт различает символы (character) и глифы (glyph). Символы, это абстрактное представление наименьших компонентов письменности, которые имеют семантическое значение. Это, в основном, буквы, знаки препинания, и другие символы, составляющие естественный или технический текст. Используемые в естественных языках буквы, группируются в наборы, которые совместно используются для записи. Буквы различных языков, представляются в Юникоде различными символами, даже если они имеют одинаковое графическое представление и семантическое значение.

Символы указываются с помощью кодовых позиции, которые хранятся в виде строк в памяти или на диске. Стандарт Юникода оперирует только кодами символов.

Глифы же представляют собой визуальную форму. Они указывают, как символы должны отображаться. Именно глифы появляются на экране монитора или на бумаге. Набор глифов составляет отдельный шрифт. Таким образом, формы глифов и способы их отрисовки, зависят от конкретных разработчиков и поставщиков шрифтов. Глифы не являются частью Стандарта Юникода.

Связи между символами и глифами: отдельный глиф может соответствовать единственному символу или нескольким. Или, наоборот, несколько символов могут отображаться с помощью одного глифа.

Например, единственный символ «латинская заглавная буква A» (U+0041) может быть представлена множеством различных глифов: курсивная, жирная, с засечками и без, нормальная или с какими-нибудь завитушками. Другой пример — последовательность букв «fi» может быть представлена, как два глифа для буква f и i, соответственно. Либо для этой цели может быть использован единственный глиф, представляющий собой лигатуру .

То, что с точки зрения пользователя является отдельным символом (независимо от того, представлен ли он одним глифом или несколькими), может быть представлено в Юникоде, как одна или несколько кодовых позиций.

В некоторых письменностях (например, в арабском языке или различных индийских письменностях), количество глифов, требуемых для отображения текста, может значительно превышать количество символов, соответствующих базовым единицам письменности. Количество глифов также может зависеть от стиля, которого придерживается данный конкретный шрифт. Например, для одного из традиционных почерков арабского письма, насталика, требуется несколько тысяч глифов. Однако, вне зависимости от стиля, для кодирования текста используется всё те же несколько десятков букв.

Шрифт и соответствующий процесс отрисовки решают, как отображать символы из памяти компьютера в глифы на экране или бумаге. Отображение конкретного символа может зависеть от контекста, например, от соседних символов.

Для латиницы отношения между символами и глифами достаточно просты и хорошо известны. Для некоторых других письменностей эти отношения явно описываются в этом Стандарте. Однако, в общем случае правильная типография требует более сложного набора правил, чем те, которые описаны здесь.

Семантика

Стандарт даёт для символов хорошо описанную семантику. Она описывается через свойства символов (см. раздел 3.5).

База данных Юникода (UCD) предоставляет списки свойств в машиночитаемом формате. Их можно использовать для реализации разбора текста, сортировки и других алгоритмов, которым требуется знание семантики кодовых позиций.

Стандарт определяет больше ста различных свойств. В том числе регистр, принадлежность к числам, комбинирование, направление и так далее (см. главу 4). Если символы используются по разному в разных языках, это описывается за рамками стандарта. По мере необходимости могут вводиться новые свойства.

Простой текст

Простой (plain) текст, это просто последовательность кодов символов. В отличии от него, например, стилизованный текст (тот же HMTL), содержит также данные о размере шрифта, цвете, ссылки и т.п.

Простой текст — всегда простой текст. Он стандартен, универсален и читаем. Стилизованный текст зависит от использующей его реализации.

Простой текст описывает собой только содержимое, но не его внешний вид. При использовании различных алгоритмов отрисовки, один и тот же простой текст может иметь разный вид. Однако, различные алгоритмы отрисовки должны придерживаться основного правила: текст должен быть читаем. Отсюда следует основное правило:

Простой текст должен содержать достаточно информации для его разборчивой отрисовки. И ничего больше.

Стандарт Юникода описывает только простой текст. Взаимодействие этого текста с другими данными идущими в том же потоке (например, HTML-тегами), это задача протокола более высокого уровня.

Логический порядок

Логический порядок, это порядок в котором текст хранится в памяти. Он примерно соответствует тому, как текст вводится с клавиатуры. И примерно соответствует фонетическому порядку. Для десятичных чисел этот порядок обычно означает, что наиболее значимая цифра идёт первой.

При отображении, логический порядок часто соответствует линейному порядку вывода символов. Слева-направо, справа-налево или сверху-вниз. Но зачастую, порядок хранения в памяти и порядок вывода отличается.

Например, это происходит при смешение в одном тексте письменностей с разным направлением вывода (например, иврита и кириллицы).

Пример: в памяти хранится текст (представьте, что в кавычках находятся буквы из иврита):

Абрам сказал: "Текст на иврите". Такие дела.

Это должно отобразиться примерно так:

Абрам сказал: "етирви ан тскеТ". Такие дела.
    --->      |    <---       |    --->

Стандарт и свойства символов позволяют однозначно преобразовать логический порядок в правильный порядок написания.

Унификация

Стандарт избегает дублирования символов, объединяя их в группы по письменностям. Общие буквы, обычно имеют один и тот же код, независимо от языка. Например иероглифы CJK (Китай-Япония-Корея). Или базовая латиница, которая используется в европейских алфавитах. Точно также Стандарт поступает со знаками пунктуации и диакритическими символами.

Неважно, что в некоторых языках одинаковые символы могут использоваться по разному. Например, запятая , в английском языке служит для отделения тысяч в числе, а во французском для отделения дробной части. Главное, это избавится от неоднозначности при отображении визуально идентичных символов.

В большинстве случаев, когда Стандарт дублирует одинаковые символы, это сделано только для поддержания совместимости с уже существующими стандартами.

Есть несколько случаев, когда визуально похожие буквы кодируются различными символами. Например, латинская o, кириллическая о и греческая ο (омикрон). Хотя эти символы похожи, они принадлежат разным письменностям. Или, другой пример, есть три буквы D, одинаково выглядящих в заглавном варианте, но различно рисующиеся в прописном. Если попробовать кодировать прописные разными кодами, а заглавные объединить в один, это приведёт к проблемам при изменении регистра.

Динамическая композиция

Стандарт позволяет динамически составлять знаки с диакритикой и слоги корейского письма Хангыль. Для этого используются композиция базового символа и комбинированных (combining) знаков. Например, диэрезис (̈) может быть использован со всеми гласными и большим количеством согласных в языках, использующих латиницу.

Эквивалентные последовательности

Некоторые текстовые элементы могут быть закодированы, как с помощью статических подготовленных (precomposed) форм, так и с помощью динамической композиции. Например, Ü — статическая форма, записываемая одним знаком. Либо можно использовать латинскую букву U и комбинируемый диэрезис. Для подобных подготовленных форм, Стандарт описывает соответствие их с эквивалентными динамическими последовательностями (см. раздел 3.7).

То есть некоторые последовательности символов в Юникоде считаются эквивалентными (см. раздел 2.12).

Стабильность

Некоторые аспекты Стандарта должны оставаться абсолютно стабильными от версии версии. Пользователи и программисты должны быть уверены в том, что однажды закодированные текстовые данные, должны всегда означать тоже самое, что и в самом начале. Если символ был определён в Стандарте, то он больше не может быть удалён или перенесён на новую кодовую позицию.

Определённые в Стандарте символы остаются навсегда, но некоторые могут быть признаны устаревшими. Их использование больше не рекомендуется. Но реализации всё равно должны правильно обрабатывать их в старых текстах. Хотя в некоторых случаях (например, при проверке орфографии) могут указать пользователю на их наличие и предложить адекватную замену.

Названия символов также никогда не изменяются. Поэтому их можно использовать в качестве идентификаторов.

Такие же гарантии стабильности распространяются и на некоторые важные свойства. Например, декомпозиция должна всегда давать одинаковый результат. Так что если текст можно нормализовать в данный момент, он должен также нормализовываться и в будущем.

Политика стабильности описана здесь: http://www.unicode.org/policies/stability_policy.html.

Совместимость

Одна из задач Юникода — совместимость с большим количеством различных стандартов. Национальных, международных и промышленных. Если варианты форм какого-то символа (или даже одна и та же форма) представлена в неком базовом стандарте в виде разных кодов, то Юникод также будет сохранять это разделение для совместимости. Это способствует простому отображению символов между Юникодом и базовым стандартом.

Гарантируется точная совместимость со стандартами, которые широко использовались на май 1993. А также учитываются некоторые важные изменения в этих стандартах после этой даты.

Обычно, конкретный код из другого стандарта соответствует конкретному коду в Юникоде. Однако, бывает, что один код из определённого стандарта соответствует последовательности кодовых позиций в Юникоде. Или наоборот.

Точно заданное соответствие между символами Юникода и других кодировок, также позволяет упростить конвертацию между этими кодировками.

См. также раздел 5.1.

Скопировано!