Вне стандарта Unicode символ - это отдельная единица текста, состоящая из одной или нескольких графем . То, что стандарт Unicode определяет как «символы», на самом деле представляет собой смесь графем и символов. Юникод предоставляет правила для интерпретации сопоставленных графем как отдельных символов.
Unicode , код точка представляет собой уникальный номер , присвоенный каждый символ Unicode (который является либо символом или графема).
К сожалению, правила Unicode позволяют интерпретировать некоторые сопоставленные графемы как другие графемы, которые уже имеют свои собственные кодовые точки ( предварительно составленные формы ). Это означает, что в Юникоде существует несколько способов представления символа. Нормализация Unicode решает эту проблему.
Глиф - это визуальное представление персонажа. Шрифт предоставляет набор глифов для определенного набора символов (не символов Юникода). Для каждого символа существует бесконечное количество возможных символов.
Ответ Марку Эмери
Во-первых, как я уже сказал, существует бесконечное количество возможных глифов для каждого символа, поэтому нет, символ не «всегда представлен одним глифом». Unicode не особо заботится о глифах, и то, что он определяет в диаграммах кода, определенно не являются глифами. Проблема в том, что они не все персонажи. Так что они?
Что больше: графема или персонаж? Как назвать те графические элементы в тексте, которые не являются буквами или знаками препинания? Один термин, который быстро приходит в голову, - это «графема». Это слово точно передает идею «графической единицы в тексте». Я предлагаю следующее определение: графема - это наименьший отдельный компонент письменного текста .
Можно пойти другим путем и сказать, что графемы состоят из символов, но тогда они будут называться «китайскими графемами», а все эти кусочки и части, из которых состоят китайские графемы, вместо этого следует называть «символами». Однако это все наоборот. Графемы - это отдельные маленькие кусочки и кусочки. Персонажи более развиты. Фразу «глифы могут быть составлены» было бы лучше сформулировать в контексте Unicode, поскольку «символы могут быть составными».
Unicode определяет символы, но также определяет графемы, которые должны быть составлены с другими графемами или символами. Созданные вами чудовища - прекрасный тому пример. Если они поймут, возможно, они получат свои собственные кодовые точки в более поздней версии Unicode;)
Во всем этом есть рекурсивный элемент. На более высоких уровнях графемы становятся символами, становятся графемами, но это графемы полностью вниз.
Ответ TS
В главе 1 стандарта говорится: «Кодировка символов Unicode эквивалентно трактует алфавитные символы, идеографические символы и символы, что означает, что они могут использоваться в любой комбинации и с одинаковой легкостью». Учитывая это утверждение, мы должны быть готовы к некоторому смешению терминов в стандарте. Иногда правильная терминология становится ясной только ретроспективно по мере разработки стандарта.
В формальных определениях языка часто бывает, что две фундаментальные вещи определяются в терминах друг друга. Например, в
XML элемент определяется как начальный тег, за которым, возможно, следует контент, за которым следует конечный тег. Контент, в свою очередь, определяется как элемент, символьные данные или несколько других возможных вещей. Шаблон самореференциальных определений также подразумевается в стандарте Unicode:
Графема - это кодовая точка или символ.
Символ состоит из последовательности одной или нескольких графем.
Впервые столкнувшись с этими двумя определениями, читатель может возразить против первого определения на том основании, что кодовая точка является символом, но это не всегда верно. Последовательность из двух кодовых точек иногда кодирует одну кодовую точку при
нормализации , и эта закодированная кодовая точка представляет символ, как показано на
рисунке 2.7 . Последовательности кодовых точек, которые кодируют другие кодовые точки. Это становится немного сложнее, и мы даже не достигли уровня, на котором схемы кодирования символов, такие как UTF-8 , используются для кодирования кодовых точек в последовательности байтов.
В некоторых контекстах, например в научной статье о
диакритических знаках , отдельные части символа могут появляться в тексте отдельно. В этом контексте отдельная часть символа может считаться символом, поэтому имеет смысл, чтобы стандарт Unicode также оставался гибким.
Как отметил Марк Эйвери, из персонажа можно составить более сложную вещь. То есть каждый символ при желании может служить графемой. Конечный результат всей композиции - это то, что «пользователь думает как персонаж». Похоже, что ни в стандарте, ни в этом обсуждении нет реального сопротивления идее, что на самом высоком уровне в тексте есть такие вещи, которые пользователь считает отдельными персонажами. Чтобы избежать перегрузки этого термина, мы можем использовать «графему» во всех случаях, когда мы хотим ссылаться на части, используемые для создания символа.
Иногда стандарт Unicode встречается повсюду с его терминологией. Например, в главе 3
UTF-8 определяется как «форма кодирования», тогда как в глоссарии «форма кодирования» определяется как что-то еще, а UTF-8 - как «схема кодирования символов». Другой пример - «Grapheme_Base» и «Grapheme_Extend», которые признаны ошибочными, но сохраняются, потому что их очистка - непростая задача. Еще предстоит проделать работу, чтобы ужесточить терминологию, используемую в стандарте.
Предложение о добавлении ОБЪЕДИНЕНИЯ графем получило это неправильно , когда он заявил , что «графема последовательность одного или более закодированные символы , которые соответствуют тому , что пользователи думают как символы.» Вместо этого следует читать: «Последовательность из одной или нескольких графем составляет то, что пользователь считает символом». Тогда он мог бы использовать термин «последовательность графемы» отдельно от термина «последовательность символов». Оба термина полезны. «Последовательность графемы» аккуратно подразумевает процесс построения персонажа из более мелких частей. «Последовательность символов» означает то, что мы все обычно интуитивно понимаем: «Последовательность вещей, которые пользователь считает символами».
Иногда программист действительно хочет работать на уровне последовательностей графем, поэтому должны быть доступны механизмы для проверки и управления этими последовательностями, но обычно при обработке текста достаточно оперировать «последовательностями символов» (что думает пользователь как персонаж) и позвольте системе управлять деталями нижнего уровня.
В каждом случае, рассмотренном до сих пор в этом обсуждении, будет более понятным использование «графемы» для обозначения неделимых компонентов и «символа» для обозначения составного объекта. Это использование также лучше отражает устоявшиеся значения обоих терминов.