Консорциум Unicode и ISO/IEC JTC 1/SC 2 / WG 2 совместно работают над списком символов в Универсальном кодированном наборе символов . Универсальный кодированный набор символов, чаще всего называемый Универсальным набором символов ( сокр. UCS, официальное обозначение: ISO / IEC 10646), является международным стандартом для сопоставления символов , дискретных символов, используемых в естественном языке , математике , музыке и других областях, уникальным машиночитаемым значениям данных. Создавая это сопоставление, UCS позволяет поставщикам компьютерного программного обеспечения взаимодействовать и передавать — обмениваться — текстовыми строками, закодированными в UCS, от одного к другому. Поскольку это универсальная карта, ее можно использовать для представления нескольких языков одновременно. Это позволяет избежать путаницы, связанной с использованием нескольких устаревших кодировок символов , что может привести к тому, что одна и та же последовательность кодов будет иметь несколько интерпретаций в зависимости от используемой кодировки символов, что приведет к моджибаке, если выбрана неправильная кодировка.
UCS имеет потенциальную емкость более 1 миллиона символов. Каждый символ UCS абстрактно представлен кодовой точкой , целым числом от 0 до 1 114 111 (1 114 112 = 2 20 + 2 16 или 17 × 2 16 = 0x 110 000 кодовых точек ), используемым для представления каждого символа во внутренней логике программного обеспечения для обработки текста . По состоянию на Unicode 16.0, выпущенный в сентябре 2024 года, 299 056 (27%) из этих кодовых точек выделены, 155 063 (14%) были назначены символами, 137 468 (12%) зарезервированы для частного использования, 2 048 используются для включения механизма суррогатов, а 66 обозначены как несимволы, оставляя оставшиеся 815 056 (73%) невыделенными. Количество закодированных символов составляется следующим образом:
ISO поддерживает базовое сопоставление символов от имени символа до кодовой точки. Часто термины символ и кодовая точка будут использоваться взаимозаменяемо. Однако, когда проводится различие, кодовая точка относится к целому числу символа: тому, что можно было бы считать его адресом. Между тем, символ в ISO/IEC 10646 включает комбинацию кодовой точки и ее имени, Unicode добавляет множество других полезных свойств к набору символов, таких как блок , категория, сценарий и направленность .
В дополнение к UCS дополнительный стандарт Unicode (не совместный проект с ISO, а скорее публикация Консорциума Unicode) содержит другие подробности реализации, такие как:
Конечные пользователи компьютерного программного обеспечения вводят эти символы в программы с помощью различных методов ввода , например, физических клавиатур или виртуальных палитр символов .
UCS можно разделить различными способами, например, по плоскости , блоку, категории персонажа или свойству персонажа . [1]
Ссылка на числовой символ HTML или XML ссылается на символ по его кодовой точке универсального набора символов /Unicode и использует формат
&#
нннн;
или
&#x
хххх;
где nnnn — это кодовая точка в десятичной форме, а hhhh — это кодовая точка в шестнадцатеричной форме. В XML-документах x должен быть строчным. nnnn или hhhh могут быть любым количеством цифр и могут включать начальные нули. hhhh может смешивать заглавные и строчные буквы, хотя заглавные буквы являются обычным стилем.
Напротив, ссылка на сущность символа ссылается на символ по имени сущности , которая имеет желаемый символ в качестве своего заменяющего текста . Сущность должна быть либо предопределена (встроена в язык разметки), либо явно объявлена в определении типа документа (DTD). Формат такой же, как и для любой ссылки на сущность:
&
имя;
где name — это имя сущности с учетом регистра. Точка с запятой обязательна.
Unicode и ISO делят набор кодовых точек на 17 плоскостей, каждая из которых может содержать 65536 различных символов или всего 1 114 112. По состоянию на 2024 год (Unicode 16.0) ISO и Консорциум Unicode выделили символы и блоки только в семи из 17 плоскостей. Остальные остаются пустыми и зарезервированы для будущего использования.
Большинство символов в настоящее время назначены на первую плоскость: Базовую многоязыковую плоскость . Это должно облегчить переход для устаревшего программного обеспечения, поскольку Базовая многоязыковая плоскость адресуется всего двумя октетами . Символы за пределами первой плоскости обычно имеют очень специализированное или редкое использование.
Каждая плоскость соответствует значению одной или двух шестнадцатеричных цифр (0–9, A–F), предшествующих четырем последним: следовательно, U+24321 находится в плоскости 2, U+4321 находится в плоскости 0 (неявно читается как U+04321), а U+10A200 будет в плоскости 16 (шестнадцатеричное 10 = десятичное 16). В пределах одной плоскости диапазон кодовых точек — шестнадцатеричный 0000—FFFF, что дает максимум 65536 кодовых точек. Плоскости ограничивают кодовые точки подмножеством этого диапазона.
Unicode добавляет свойство блока в UCS, которое далее делит каждую плоскость на отдельные блоки. Каждый блок представляет собой группу символов по их использованию, например, «математические операторы» или «символы еврейского письма». При назначении символов ранее не назначенным кодовым точкам Консорциум обычно выделяет целые блоки похожих символов: например, все символы, принадлежащие к одному и тому же скрипту, или все символы с похожим назначением назначаются одному блоку. Блоки также могут поддерживать не назначенные или зарезервированные кодовые точки, когда Консорциум ожидает, что блок потребует дополнительных назначений.
Первые 256 кодовых точек в UCS соответствуют таковым в ISO 8859-1 , самой популярной 8-битной кодировке символов в западном мире . В результате первые 128 символов также идентичны ASCII . Хотя Unicode называет их блоком латинского алфавита, эти два блока содержат много символов, которые обычно используются за пределами латинского алфавита. В общем, не все символы в данном блоке должны быть одного алфавита, и данный алфавит может встречаться в нескольких разных блоках.
Unicode назначает каждому символу UCS общую категорию и подкатегорию. Общие категории: буква, знак, число, пунктуация, символ или элемент управления (другими словами, форматирующий или неграфический символ).
Типы включают в себя:
Unicode кодирует более ста тысяч символов. Большинство из них представляют графемы для обработки в виде линейного текста. Однако некоторые из них либо не представляют графемы, либо, как графемы, требуют исключительной обработки. [4] [5] В отличие от управляющих символов ASCII и других символов, включенных для устаревших возможностей кругового обхода, эти другие специальные символы наделяют простой текст важной семантикой.
Некоторые специальные символы могут изменять макет текста, такие как нулевой ширины joiner и нулевой ширины non-joiner, в то время как другие вообще не влияют на макет текста, но вместо этого влияют на то, как текстовые строки сортируются, сопоставляются или иным образом обрабатываются. Другие специальные символы, такие как математические невидимые символы, обычно не влияют на рендеринг текста, хотя сложное программное обеспечение для верстки текста может выбрать тонкую настройку интервалов вокруг них.
Unicode не определяет разделение труда между программным обеспечением для шрифтов и текстовой верстки (или «движком») при рендеринге текста Unicode. Поскольку более сложные форматы шрифтов, такие как OpenType или Apple Advanced Typography , предусматривают контекстную замену и позиционирование глифов, простой движок текстовой верстки может полностью полагаться на шрифт для всех решений по выбору и размещению глифов. В той же ситуации более сложный движок может объединять информацию из шрифта со своими собственными правилами для достижения собственного представления о наилучшем рендеринге. Чтобы реализовать все рекомендации спецификации Unicode, текстовый движок должен быть готов работать со шрифтами любого уровня сложности, поскольку контекстные правила замены и позиционирования отсутствуют в некоторых форматах шрифтов и являются необязательными в остальных. Дробная косая черта является примером: сложные шрифты могут или не могут предоставлять правила позиционирования при наличии символа дробной косой черты для создания дроби, в то время как шрифты в простых форматах не могут.
Метка порядка байтов (BOM) U+FEFF, появляющаяся в начале текстового файла или потока, указывает на форму кодировки и порядок байтов.
Если первый байт потока равен 0xFE, а второй — 0xFF, то текст потока вряд ли будет закодирован в UTF-8 , так как эти байты недопустимы в UTF-8. Он также вряд ли будет в UTF-16 в порядке байтов little-endian , так как 0xFE, 0xFF, прочитанные как 16-битное little-endian слово, будут иметь вид U+FFFE, что бессмысленно. Последовательность также не имеет смысла ни в какой компоновке кодировки UTF-32 , так что, вкратце, она служит довольно надежным указанием на то, что текстовый поток закодирован как UTF-16 в порядке байтов big-endian . И наоборот, если первые два байта равны 0xFF, 0xFE, то текстовый поток можно считать закодированным как UTF-16LE, так как, прочитанные как 16-битное little-endian значение, байты дают ожидаемую метку порядка байтов 0xFEFF. Однако это предположение становится сомнительным, если следующие два байта оба равны 0x00; либо текст начинается с нулевого символа (U+0000), либо правильной кодировкой на самом деле является UTF-32LE, в которой полная 4-байтовая последовательность FF FE 00 00 представляет собой один символ, BOM.
Последовательность UTF-8, соответствующая U+FEFF, — 0xEF, 0xBB, 0xBF. Эта последовательность не имеет значения в других формах кодировки Unicode, поэтому она может служить указанием на то, что этот поток закодирован как UTF-8.
Спецификация Unicode не требует использования меток порядка байтов в текстовых потоках. Далее в ней говорится, что их не следует использовать в ситуациях, когда уже используется какой-либо другой метод сигнализации формы кодирования.
В первую очередь для математики, невидимый разделитель (U+2063) обеспечивает разделитель между символами, где пунктуация или пробел могут быть опущены, например, в двумерном индексе, таком как ij. Невидимые времена (U+2062) и применение функции (U+2061) полезны в математическом тексте, где подразумевается умножение членов или применение функции без какого-либо глифа, указывающего на операцию. Unicode 5.1 также вводит математический невидимый символ плюс (U+2064), который может указывать, что целое число, за которым следует дробь, должно обозначать их сумму, но не их произведение.
Символ дробной косой черты (U+2044) имеет особое поведение в стандарте Unicode: [6] (раздел 6.2, Другая пунктуация)
Стандартная форма дроби, построенной с использованием дробной косой черты, определяется следующим образом: любая последовательность из одной или нескольких десятичных цифр (общая категория = Nd), за которой следует дробная косая черта, за которой следует любая последовательность из одной или нескольких десятичных цифр. Такая дробь должна отображаться как единица, например ¾ . Если отображающее программное обеспечение не способно сопоставить дробь с единицей, то ее также можно отобразить как простую линейную последовательность в качестве резервного варианта (например, 3/4). Если дробь необходимо отделить от предыдущего числа, то можно использовать пробел, выбрав соответствующую ширину (обычную, тонкую, нулевую ширину и т. д.). Например, 1 + ПРОБЕЛ НУЛЕВОЙ ШИРИНЫ + 3 + ДРОБНАЯ КОСАЯ ЧЕРТА + 4 отображается как 1¾ .
Следуя этой рекомендации Unicode, системы обработки текста выдают сложные символы из простого текста. Здесь наличие символа дробной косой черты указывает движку макета синтезировать дробь из всех последовательных цифр, предшествующих и следующих за косой чертой. На практике результаты различаются из-за сложного взаимодействия между шрифтами и движками макета. Простые движки текстовой верстки, как правило, вообще не синтезируют дроби, а вместо этого рисуют глифы в виде линейной последовательности, как описано в резервной схеме Unicode.
Более сложные движки макета сталкиваются с двумя практическими вариантами: они могут следовать рекомендациям Unicode или полагаться на собственные инструкции шрифта для синтеза дробей. Игнорируя инструкции шрифта, движок макета может гарантировать рекомендуемое Unicode поведение. Следуя инструкциям шрифта, движок макета может добиться лучшей типографики , поскольку размещение и форма цифр будут настроены на этот конкретный шрифт в этом конкретном размере.
Проблема со следованием инструкциям шрифта заключается в том, что более простые форматы шрифтов не имеют возможности указать поведение синтеза дробей. Между тем, более сложные форматы не требуют, чтобы шрифт указывал поведение синтеза дробей, и поэтому многие этого не делают. Большинство шрифтов сложных форматов могут дать команду движку макета заменить последовательность обычного текста, например 1⁄2, на предварительно составленный глиф ½ . Но поскольку многие из них не будут выдавать инструкции для синтеза дробей, строка обычного текста, например 221⁄225, вполне может отображаться как 22½25 (где ½ будет замененной предварительно составленной дробью, а не синтезированной). Перед лицом таких проблем тем, кто хочет положиться на рекомендуемое поведение Unicode, следует выбирать шрифты, известные синтезом дробей, или программное обеспечение для верстки текста, известное тем, что производит рекомендуемое поведение Unicode независимо от шрифта.
Направление письма — это направление, в котором глифы размещаются на странице относительно прямого продвижения символов в строке Unicode. Английский и другие языки латинского алфавита имеют направление письма слева направо. Несколько основных алфавитов, таких как арабский и иврит , имеют направление письма справа налево. Спецификация Unicode назначает каждому символу тип направления , чтобы сообщить текстовым процессорам, как последовательности символов должны быть упорядочены на странице.
В то время как лексические символы (то есть буквы) обычно специфичны для одного письменного алфавита, некоторые символы и знаки препинания используются во многих письменных алфавитах. Unicode мог бы создать дублирующие символы в репертуаре, которые отличаются только типом направления, но вместо этого решил объединить их и назначить им нейтральный тип направления. Они приобретают направление во время рендеринга от соседних символов. Некоторые из этих символов также имеют свойство bidi-mirrored, указывающее, что глиф должен отображаться в зеркальном отображении при использовании в тексте справа налево.
Тип направления во время рендеринга нейтрального символа может оставаться неоднозначным, когда метка помещается на границе между изменениями направления. Чтобы решить эту проблему, Unicode включает символы, которые имеют сильную направленность, не имеют глифа, связанного с ними, и игнорируются системами, которые не обрабатывают двунаправленный текст:
Окружение двунаправленно нейтрального символа знаком слева направо заставит символ вести себя как символ слева направо, а окружение его знаком справа налево заставит его вести себя как символ справа налево. Поведение этих символов подробно описано в Двунаправленном алгоритме Unicode.
Хотя Unicode разработан для обработки нескольких языков, нескольких систем письма и даже текста, который идет либо слева направо, либо справа налево с минимальным вмешательством автора, существуют особые обстоятельства, когда смесь двунаправленного текста может стать сложной — требуя большего контроля со стороны автора. Для этих обстоятельств Unicode включает пять других символов для управления сложным встраиванием текста слева направо в текст справа налево и наоборот:
Термин «символ» не имеет четкого определения, и чаще всего мы имеем в виду графему . Графема визуально представлена своим глифом . Используемая гарнитура шрифта (часто ошибочно называемая шрифтом ) может отображать визуальные вариации одного и того же символа. Возможно, что две разные графемы могут иметь совершенно одинаковый глиф или быть визуально настолько близки, что среднестатистический читатель не сможет их отличить.
Графема почти всегда представлена одной кодовой точкой, например, ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА A представлена только кодовой точкой U+0041.
Графема ЛАТИНСКАЯ ЗАГЛАВНАЯ A С ДИАЭРЕЗОЙ Ä является примером того, как символ может быть представлен более чем одной кодовой точкой. Это может быть U+00C4 или U+0041U+0308. U+0041 — это знакомая A, а U+0308 — это ОБЪЕДИНЯЮЩАЯ ДИАЭРЕЗА ̈ , объединяющий диакритический знак .
Когда объединяющий знак соседствует с кодовой точкой необъединяющего знака, приложения для рендеринга текста должны накладывать объединяющий знак на глиф, представленный другой кодовой точкой, чтобы сформировать графему в соответствии с набором правил. [7]
Слово BÄM, таким образом, будет состоять из трех графем. Оно может состоять из трех кодовых точек или более в зависимости от того, как на самом деле составлены символы.
Unicode предоставляет список символов, которые он считает пробельными для поддержки взаимодействия. Реализации программного обеспечения и другие стандарты могут использовать этот термин для обозначения немного другого набора символов. Например, Java не рассматривает U+00A0 NO-BREAK SPACE или U+0085 <control-0085> (СЛЕДУЮЩАЯ СТРОКА) как пробел, хотя Unicode это делает. Пробельные символы — это символы, обычно предназначенные для сред программирования. Часто они не имеют синтаксического значения в таких средах программирования и игнорируются машинными интерпретаторами. Unicode обозначает устаревшие управляющие символы U+0009 — U+000D и U+0085 как пробельные символы, а также все символы, значение свойства General Category которых равно Separator. Всего существует 25 пробельных символов по состоянию на Unicode 16.0.
Соединитель нулевой ширины (U+200D) и несоединитель нулевой ширины (U+200C) управляют соединением и лигированием глифов. Соединитель не заставляет символы, которые в противном случае не были бы соединены или лигированы, делать это, но в паре с несоединителем эти символы могут использоваться для управления свойствами соединения и лигирования окружающих двух соединяющих или лигирующих символов. Соединитель объединяющих графем (U+034F) используется для различения двух базовых символов как одной общей базы или диграфа, в основном для базовой обработки текста, сортировки строк, фальцовки регистра и т. д.
Наиболее распространенным разделителем слов является пробел (U+0020). Однако существуют и другие соединители и разделители слов, которые также обозначают разрыв между словами и участвуют в алгоритмах переноса строк. Пробел без разрыва (U+00A0) также создает сдвиг базовой линии без глифа, но подавляет, а не разрешает перенос строки. Пробел нулевой ширины (U+200B) допускает перенос строки, но не предоставляет пробела: в некотором смысле соединяя, а не разделяя два слова. Наконец, Соединитель слов (U+2060) подавляет разрывы строк и также не использует пробелы, создаваемые сдвигом базовой линии.
Они предоставляют Unicode собственные разделители абзацев и строк, независимые от устаревших кодированных управляющих символов ASCII, таких как возврат каретки (U+000A), перевод строки (U+000D) и следующая строка (U+0085). Unicode не предоставляет другие управляющие символы форматирования ASCII, которые, предположительно, не являются частью модели обработки простого текста Unicode. Эти устаревшие управляющие символы форматирования включают Tab (U+0009), Line Tabulation или Vertical Tab (U+000B) и Form Feed (U+000C), который также считается разрывом страницы.
Символ пробела (U+0020), обычно вводимый с помощью клавиши пробела на клавиатуре, семантически служит разделителем слов во многих языках. По причинам, связанным с наследием, UCS также включает пробелы разных размеров, которые являются эквивалентами совместимости для символа пробела. Хотя эти пробелы разной ширины важны в типографике, модель обработки Unicode требует, чтобы такие визуальные эффекты обрабатывались с помощью форматированного текста, разметки и других подобных протоколов. Они включены в репертуар Unicode в первую очередь для обработки без потерь двустороннего транскодирования из других кодировок наборов символов. Эти пробелы включают:
За исключением исходного пробела ASCII, все остальные пробелы являются символами совместимости. В этом контексте это означает, что они фактически не добавляют семантического содержания в текст, а вместо этого обеспечивают управление стилем. В Unicode этот несемантический контроль стиля часто называют расширенным текстом, и он находится вне сферы целей Unicode. Вместо того, чтобы использовать разные пробелы в разных контекстах, этот стиль должен обрабатываться с помощью интеллектуального программного обеспечения для макетирования текста.
Три других разделителя слов, специфичных для различных систем письма:
Несколько символов предназначены для контроля переносов строк, либо препятствуя им (символы без переносов), либо предлагая переносы строк, такие как мягкий дефис (U+00AD) (иногда называемый «скромным дефисом»). Такие символы, хотя и предназначены для стилизации, вероятно, незаменимы для сложных типов переносов строк, которые они делают возможными.
Символы, запрещающие разрыв, должны быть эквивалентны последовательности символов, заключенной в Word Joiner U+2060. Однако Word Joiner может быть добавлен до или после любого символа, который позволяет разрыву строки запретить такой разрыв строки.
Как запрещающие, так и разрешающие разрывы символы участвуют вместе с другими знаками пунктуации и пробелами, позволяя системам визуализации текста определять разрывы строк в алгоритме разрыва строк Unicode. [8]
Все кодовые точки, которым дано какое-либо назначение или использование, считаются назначенными кодовыми точками. Из них они могут быть назначены абстрактному символу или иным образом обозначены для какой-либо другой цели.
Большинство кодовых точек в реальном использовании были назначены абстрактным символам. Это включает в себя символы частного использования, которые, хотя формально и не обозначены стандартом Unicode для определенной цели, требуют, чтобы отправитель и получатель заранее договорились о том, как их следует интерпретировать для осуществления осмысленного обмена информацией .
UCS включает 137 468 символов частного использования, которые являются кодовыми точками для частного использования, распределенными по трем различным блокам, каждый из которых называется областью частного использования (PUA). Стандарт Unicode распознает кодовые точки внутри PUA как законные коды символов Unicode, но не назначает им никаких (абстрактных) символов. Вместо этого отдельные лица, организации, поставщики программного обеспечения, поставщики операционных систем, поставщики шрифтов и сообщества конечных пользователей могут свободно использовать их по своему усмотрению. В закрытых системах символы в PUA могут работать однозначно, что позволяет таким системам представлять символы или глифы, не определенные в Unicode. [9] В публичных системах их использование более проблематично, поскольку нет реестра и нет способа помешать нескольким организациям принимать одни и те же кодовые точки для разных целей. Одним из примеров такого конфликта является использование Apple U+F8FF для логотипа Apple , против использования ConScript Unicode Registry U+F8FF в качестве глифа клингонской мумификации в клингонском письме . [10]
Базовая многоязычная плоскость (плоскость 0) содержит 6400 символов частного использования в одноименной области частного использования PUA , которая варьируется от U+E000 до U+F8FF. Плоскости частного использования , плоскость 15 и плоскость 16, каждая имеет свои собственные PUA из 65 534 символов частного использования (при этом последние две кодовые точки каждой плоскости не являются символами). Это дополнительная область частного использования A , которая варьируется от U+F0000 до U+FFFFD, и дополнительная область частного использования B , которая варьируется от U+100000 до U+10FFFD.
PUA — это концепция, унаследованная от некоторых азиатских систем кодирования. Эти системы имели частные области использования для кодирования того, что японцы называют гайдзи (редкие символы, которые обычно не встречаются в шрифтах) способами, специфичными для приложений.
UCS использует суррогаты для адресации символов за пределами исходной базовой многоязыковой плоскости , не прибегая к представлениям слов длиной более 16 бит. [11] Существует 1024 «высоких» суррогата (D800–DBFF) и 1024 «низких» суррогата (DC00–DFFF). Объединив пару суррогатов, можно адресовать оставшиеся символы во всех других плоскостях (1024 × 1024 = 1048576 кодовых точек в других 16 плоскостях). В UTF-16 они всегда должны появляться парами, как высокий суррогат, за которым следует низкий суррогат, таким образом, используя 32 бита для обозначения одной кодовой точки.
Суррогатная пара обозначает кодовую точку
где H и L — числовые значения высокого и низкого суррогатов соответственно. [12]
Поскольку высокие суррогатные значения в диапазоне DB80–DBFF всегда дают значения в плоскостях частного использования, высокий суррогатный диапазон можно далее разделить на (нормальные) высокие суррогаты (D800–DB7F) и «высокие суррогаты частного использования» (DB80–DBFF).
Изолированные суррогатные кодовые точки не имеют общей интерпретации; следовательно, для этого диапазона не предоставляются таблицы кодов символов или списки имен. В языке программирования Python отдельные суррогатные коды используются для встраивания недекодируемых байтов в строки Unicode. [13]
Термин «несимвол» без дефиса относится к 66 кодовым точкам (помеченным <not a character>
), постоянно зарезервированным для внутреннего использования, и поэтому гарантированно никогда не будет назначен символу. [14] Каждая из 17 плоскостей имеет свои две конечные кодовые точки, отведенные в качестве несимволов. Таким образом, несимволами являются: U+FFFE и U+FFFF на BMP, U+1FFFE и U+1FFFF на Plane 1 и так далее, до U+10FFFE и U+10FFFF на Plane 16, всего 34 кодовых точки. Кроме того, в BMP есть непрерывный диапазон из еще 32 несимволических кодовых точек: U+FDD0..U+FDEF. Программные реализации могут свободно использовать эти кодовые точки для внутреннего использования. Одним из особенно полезных примеров несимвола является кодовая точка U+FFFE. Эта кодовая точка имеет обратную последовательность байтов UTF-16/UCS-2 метки порядка байтов (U+FEFF). Если поток текста содержит этот несимвол, это является хорошим признаком того, что текст был интерпретирован с неправильным порядком байтов .
Версии стандарта Unicode с 3.1.0 по 6.3.0 утверждали, что несимволы «никогда не должны заменяться». Исправление № 9 стандарта позже заявило, что это приводит к «необоснованному чрезмерному отклонению», разъяснив, что «[Несимволы] не являются незаконными при обмене и не приводят к неправильному формированию текста Unicode», и удалило первоначальное утверждение.
Все остальные кодовые точки, которые не обозначены, называются зарезервированными. Эти кодовые точки могут быть назначены для конкретного использования в будущих версиях стандарта Unicode.
В то время как многие другие наборы символов назначают символ для каждого возможного представления символа в виде глифа, Unicode стремится рассматривать символы отдельно от глифов. Это различие не всегда однозначно; однако, несколько примеров помогут проиллюстрировать различие. Часто два символа могут быть объединены типографским способом для улучшения читаемости текста. Например, последовательность из трех букв «ffi» может рассматриваться как один глиф. Другие наборы символов часто назначают этому глифу кодовую точку в дополнение к отдельным буквам: «f» и «i».
Кроме того, Unicode рассматривает измененные диакритические знаки как отдельные символы, которые при отображении становятся одним глифом. Например, «o» с диарезисом : « ö ». Традиционно другие наборы символов назначали уникальную кодовую точку символа для каждой измененной диакритической буквы, используемой в каждом языке. Unicode стремится создать более гибкий подход, позволяя объединять диакритические знаки для комбинирования с любой буквой. Это может значительно сократить количество активных кодовых точек, необходимых для набора символов. В качестве примера рассмотрим язык, который использует латинский алфавит и объединяет диарезис с заглавными и строчными буквами «a», «o» и «u». При подходе Unicode в набор символов необходимо добавить только диакритический знак диарезиса для использования с латинскими буквами: «a», «A», «o», «O», «u» и «U»: всего семь символов. Устаревший набор символов должен добавить шесть предварительно составленных букв с диэрезисом в дополнение к шести кодовым точкам, которые он использует для букв без диэрезиса: всего двенадцать кодовых точек символов.
UCS включает тысячи символов, которые Unicode определяет как символы совместимости. Это символы, которые были включены в UCS, чтобы предоставить отдельные кодовые точки для символов, которые различаются в других наборах символов, но не будут различаться в подходе Unicode к символам.
Главной причиной такого различия было то, что Unicode делает различие между символами и глифами. Например, при написании английского языка курсивом буква «i» может принимать разные формы, независимо от того, появляется ли она в начале слова, в конце слова, в середине слова или изолированно. Такие языки, как арабский, написанные арабским шрифтом, всегда являются курсивными. Каждая буква имеет много разных форм. UCS включает 730 символов арабской формы, которые распадаются всего на 88 уникальных арабских символов. Однако эти дополнительные арабские символы включены для того, чтобы программное обеспечение для обработки текста могло переводить текст из других наборов символов в UCS и обратно без потери информации, что имеет решающее значение для программного обеспечения, не поддерживающего Unicode.
Однако для UCS и Unicode в частности предпочтительный подход заключается в том, чтобы всегда кодировать или сопоставлять эту букву с одним и тем же символом, независимо от того, где она появляется в слове. Затем различные формы каждой буквы определяются методами программного обеспечения шрифта и макета текста. Таким образом, внутренняя память для символов остается одинаковой независимо от того, где символ появляется в слове. Это значительно упрощает поиск, сортировку и другие операции по обработке текста.
Каждый символ в Unicode определяется большим и растущим набором свойств. Большинство этих свойств не являются частью универсального набора символов. Свойства облегчают обработку текста, включая сопоставление или сортировку текста, идентификацию слов, предложений и графем, рендеринг или отображение текста и т. д. Ниже приведен список некоторых основных свойств. В базе данных символов Unicode задокументировано множество других свойств. [15]
Unicode предоставляет онлайн-базу данных [21] для интерактивного запроса всего репертуара символов Unicode по различным свойствам.