Эквивалент Unicode

редактировать

Эквивалент Unicode - это спецификация Unicode символ стандарт кодирования, согласно которому некоторые последовательности кодовых точек представляют по существу один и тот же символ. Эта функция была введена в стандарт, чтобы обеспечить совместимость с существующими стандартными наборами символов , которые часто включали похожие или идентичные символы.

Unicode предоставляет два таких понятия: каноническая эквивалентность и совместимость. Последовательности кодовой точки, которые определены как канонически эквивалентные, как предполагается, имеют одинаковый внешний вид и значение при печати или отображении. Например, кодовая точка U + 006E (латинский нижний регистр "n"), за которым следует U + 0303 (, объединяющая тильда "̃") определяется Unicode как канонически эквивалентный единственной кодовой точке U + 00F1 (строчная буква «- » испанского алфавита ). Следовательно, эти последовательности должны отображаться одинаково, должны обрабатываться одинаково такими приложениями, как алфавитное имена или поиск, и могут быть заменены друг на друга. Точно так же каждый блок слога хангыль, который закодирован как один символ, может быть эквивалентно закодирован как комбинация ведущего соединяющегося джамо, соединяющегося гласного джамо и, если необходимо, замыкающего соединяющегося джамо.

Предполагается, что последовательности, которые определены как совместимые, возможно, имеют различный внешний вид, но одинаковое значение в некоторых контекстах. Так, например, кодовая точка U + FB00 (типографская лигатура «ff») определяется как совместимая, но не канонически эквивалентная, с последовательностью U + 0066 U + 0066 (две латинские буквы «f " письма). Совместимые последовательности могут обрабатываться одинаково в некоторых приложениях (например, сортировка и индексация ), но не в других; и могут заменять друг друга в одних ситуациях, но не в других. Последовательности, которые канонически эквивалентны, также совместимы, но обратное не обязательно.

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

Содержание

  • 1 Источники эквивалентности
    • 1.1 Дублирование символов
    • 1.2 Объединение и предварительно составленные символы
      • 1.2.1 Пример
    • 1.3 Типографское отсутствие взаимодействия
    • 1.4 Типографические условные обозначения
    • 1.5 Ошибки кодирования
  • 2 Нормализация
    • 2.1 Нормальные формы
    • 2.2 Канонический порядок
  • 3 Ошибки из-за различий в нормализации
  • 4 См. Также
  • 5 Примечания
  • 6 Ссылки
  • 7 Внешние ссылки

Источники эквивалентности

Дублирование символов

Для совместимости или по другим причинам Unicode иногда назначает две разные кодовые точки сущностям, которые по сути являются одним и тем же символом. Например, символ «Å» может быть закодирован как U + 00C5 (стандартное название «ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА A С КОЛЬЦОМ ВЫШЕ», буква алфавита в шведском и несколько других языков ) или как U + 212B («ЗНАК АНГСТРОМ»). Тем не менее, символ для angstrom определяется как эта шведская буква, и большинство других символов, которые являются буквами (например, "V" для volt ), не имеют отдельной кодовой точки для каждого использования.. В общем, кодовые точки действительно идентичных символов (которые могут отображаться одинаковым образом в шрифтах Unicode) определены как канонически эквивалентные.

Объединение и предварительно составленные символы

Для согласованности с некоторыми старыми стандартами Unicode предоставляет единые кодовые точки для многих символов, которые можно рассматривать как измененные формы других символов (например, U + 00F1 для "ñ" "или U + 00C5 для" Å ") или как комбинации двух или более символов (например, U + FB00 для лигатуры" ff "или U + 0132 для голландской буквы "IJ ")

Для согласования с другими стандартами и для большей гибкости Unicode также предоставляет коды для многих элементов, которые не используются сами по себе, но предназначены для изменения или объединения с предыдущим. Примеры этих комбинирующих символов - объединяющая тильда и японский диакритический знак дакутэн ("◌ ゛", U + 3099).

В контексте Юникода, композиция символов - это процесс замены кодовых точек базовой буквы, за которой следует один или несколько комбинируемых символов, в один предварительно составленный символ ; и разложение символа - противоположное процесс.

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

Пример

Амели с его двумя канонически эквивалентными формами Unicode (NFC и NFD)
символ NFCAmélie
кодовая точка NFC0041006d00e9006c00690065
Кодовая точка NFD0041006d00650301006c00690065
Символ NFDAme◌́lie

Типографский не- взаимодействие

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

Типографические соглашения

Unicode предоставляет кодовые точки для некоторых символов или групп символы, которые изменяются только по эстетическим соображениям (например, лигатуры, полуширина символы катакана, или латинские буквы двойной ширины для использования в японских текстах) или для добавления новой семантики без потери исходной (например, цифры в нижнем индексе или в верхнем индексе позиций или цифры в кружке (например, «①»), унаследованные от некоторых японских шрифтов). Такая последовательность считается совместимой с последовательностью исходных (отдельных и немодифицированных) символов в интересах приложений, где внешний вид и добавленная семантика не имеют значения. Однако две последовательности не объявлены канонически эквивалентными, поскольку различие имеет некоторое семантическое значение и влияет на отображение текста.

Ошибки кодирования

UTF-8 и UTF-16 (а также некоторые другие кодировки Unicode) не позволяют использовать все возможные последовательности единиц кода. Различное программное обеспечение будет преобразовывать недопустимые последовательности в символы Unicode, используя различные правила, некоторые из которых имеют очень большие потери (например, превращая все недопустимые последовательности в один и тот же символ). Это можно рассматривать как форму нормализации и может привести к тем же трудностям, что и другие.

Нормализация

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

Unicode предоставляет стандартные алгоритмы нормализации, которые создают уникальную (нормальную) последовательность кодовых точек для всех эквивалентных последовательностей; критерии эквивалентности могут быть каноническими (NF) или совместимостью (NFK). Поскольку можно произвольно выбрать репрезентативный элемент класса эквивалентности , для каждого критерия эквивалентности возможны несколько канонических форм. Unicode предоставляет две нормальные формы, которые семантически значимы для каждого из двух критериев совместимости: составные формы NFC и NFKC и разложенные формы NFD и NFKD. Как составные, так и разложенные формы накладывают канонический порядок на последовательность кодовых точек, который необходим для того, чтобы нормальные формы были уникальными.

Для сравнения или поиска строк Unicode программное обеспечение может использовать составные или разложенные формы; этот выбор не имеет значения, если он одинаков для всех строк, участвующих в поиске, сравнении и т. д. С другой стороны, выбор критериев эквивалентности может повлиять на результаты поиска. Например, некоторые типографические лигатуры, такие как U + FB03 (ffi), римские цифры, такие как U + 2168 (Ⅸ), и даже нижние и верхние индексы, например U + 2075 (⁵) имеют свои собственные кодовые точки Unicode. Каноническая нормализация (NF) не влияет ни на один из них, но нормализация совместимости (NFK) разложит лигатуру ffi на составляющие буквы, поэтому поиск U + 0066 (f) в качестве подстроки будет успешным в нормализации NFKC для U + FB03 но не в нормализации NFC U + FB03. То же самое при поиске латинской буквы I (U + 0049) в предварительно составленной римской цифре Ⅸ (U + 2168). Подобным образом верхний индекс «⁵» (U + 2075) преобразуется в «5» (U + 0035) путем сопоставления совместимости.

Преобразование надстрочных индексов в базовые эквиваленты может не подходить, однако, для программного обеспечения с форматированным текстом, потому что информация о надстрочных индексах теряется в процессе. Чтобы учесть это различие, база данных символов Unicode содержит теги форматирования совместимости, которые предоставляют дополнительные сведения о преобразовании совместимости. В случае типографских лигатур этот тег просто , а для верхнего индекса - . Стандарты форматированного текста, такие как HTML, принимают во внимание теги совместимости. Например, HTML использует свою собственную разметку для размещения U + 0035 в позиции верхнего индекса.

Нормальные формы

Четыре формы нормализации Unicode и алгоритмы (преобразования) для их получения перечислены в Таблица ниже.

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

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

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

Однако они не являются инъективными (они сопоставляют разные исходные глифы и последовательности с одной и той же нормализованной последовательностью) и, следовательно, также не биективными (не могут быть восстановлены). Например, отдельные строки Unicode «U + 212B» (знак Ангстрема «Å») и «U + 00C5» (шведская буква «Å») расширяются NFD (или NFKD) в последовательность «U + 0041». U + 030A »(латинская буква« A »и объединение кольца над « ° »), которое затем сокращается с помощью NFC (или NFKC) до« U + 00C5 »(шведская буква« Å »).

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

Канонический порядок

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

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

Например, символ U + 1EBF (ế), используемый в вьетнамском языке, имеет как острый, так и циркумфлексный ударения. Его каноническая декомпозиция представляет собой трехсимвольную последовательность U + 0065 (e) U + 0302 (циркумфлексный ударение) U + 0301 (острый ударение). Классы комбинирования для двух акцентов равны 230, таким образом, U + 1EBF не эквивалентен U + 0065 U + 0301 U + 0302.

Поскольку не все комбинируемые последовательности имеют предварительно составленный эквивалент (последний в предыдущем примере может быть сокращен только до U + 00E9 U + 0302), даже на нормальную форму NFC влияет поведение комбинируемых символов.

Ошибки из-за различий в нормализации

Когда два приложения совместно используют данные Unicode, но нормализуют их по-разному, это может привести к ошибкам и потере данных. В одном конкретном случае OS X нормализовала имена файлов Unicode, отправленные из Samba программного обеспечения для совместного использования файлов и принтеров. Samba не распознала измененные имена файлов как эквивалентные оригиналу, что привело к потере данных. Решение такой проблемы нетривиально, поскольку нормализация не является обратимой без потерь.

См. Также

Примечания

Ссылки

Внешние ссылки

Последняя правка сделана 2021-06-20 11:00:43
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте