Außerhalb des Unicode-Standards ist ein Zeichen eine einzelne Texteinheit, die aus einem oder mehreren Graphemen besteht . Was der Unicode-Standard als "Zeichen" definiert, ist eigentlich eine Mischung aus Graphemen und Zeichen. Unicode bietet Regeln für die Interpretation nebeneinander angeordneter Grapheme als einzelne Zeichen.
Ein Unicode- Codepunkt ist eine eindeutige Nummer, die jedem Unicode-Zeichen zugewiesen wird (entweder ein Zeichen oder ein Graphem).
Leider erlauben die Unicode-Regeln, dass einige nebeneinander angeordnete Grapheme als andere Grapheme interpretiert werden, die bereits ihre eigenen Codepunkte haben ( vorkomposierte Formulare ). Dies bedeutet, dass es in Unicode mehrere Möglichkeiten gibt, ein Zeichen darzustellen. Die Unicode-Normalisierung behebt dieses Problem.
Eine Glyphe ist die visuelle Darstellung eines Zeichens. Eine Schriftart enthält eine Reihe von Glyphen für eine bestimmte Reihe von Zeichen (keine Unicode-Zeichen). Für jedes Zeichen gibt es unendlich viele mögliche Glyphen.
Eine Antwort an Mark Amery
Erstens gibt es, wie gesagt, eine unendliche Anzahl möglicher Glyphen für jedes Zeichen, also nein, ein Zeichen wird nicht "immer durch ein einzelnes Glyphen dargestellt". Unicode beschäftigt sich nicht viel mit Glyphen, und die Dinge, die es in seinen Codetabellen definiert, sind sicherlich keine Glyphen. Das Problem ist, dass sie nicht alle Charaktere sind. Also was sind sie?
Welches ist die größere Entität, das Graphem oder der Charakter? Wie nennt man diese grafischen Elemente im Text, die keine Buchstaben oder Satzzeichen sind? Ein Begriff, der schnell in den Sinn kommt, ist "Graphem". Es ist ein Wort, das genau die Idee einer "grafischen Einheit in einem Text" heraufbeschwört. Ich biete diese Definition an: Ein Graphem ist die kleinste eigenständige Komponente in einem geschriebenen Text .
Man könnte in die andere Richtung gehen und sagen, dass Grapheme aus Zeichen bestehen, aber dann würden sie "chinesische Grapheme" genannt, und all diese Teile, aus denen chinesische Grapheme bestehen, müssten stattdessen "Zeichen" genannt werden. Das ist jedoch alles rückwärts. Grapheme sind die einzelnen Kleinigkeiten. Charaktere sind weiter entwickelt. Der Ausdruck "Glyphen sind zusammensetzbar" würde im Zusammenhang mit Unicode besser ausgedrückt werden als "Zeichen sind zusammensetzbar".
Unicode definiert Zeichen, aber es definiert auch Grapheme, die mit anderen Graphemen oder Zeichen zusammengesetzt werden sollen. Diese Monstrositäten, die Sie komponiert haben, sind ein gutes Beispiel dafür. Wenn sie es verstehen, bekommen sie vielleicht ihre eigenen Codepunkte in einer späteren Version von Unicode;)
All dies hat ein rekursives Element. Auf höheren Ebenen werden Grapheme zu Zeichen zu Graphemen, aber es sind Grapheme ganz unten.
Eine Antwort an TS
In Kapitel 1 des Standards heißt es: "Die Unicode-Zeichenkodierung behandelt alphabetische Zeichen, ideografische Zeichen und Symbole gleich, was bedeutet, dass sie in jeder Mischung und mit gleicher Leichtigkeit verwendet werden können." Angesichts dieser Aussage sollten wir auf eine gewisse Verschmelzung von Begriffen im Standard vorbereitet sein. Manchmal wird die richtige Terminologie erst im Nachhinein klar, wenn sich ein Standard entwickelt.
In formalen Definitionen einer Sprache kommt es häufig vor, dass zwei grundlegende Dinge in Bezug aufeinander definiert werden. In
XML wird ein Element beispielsweise als Start-Tag definiert, möglicherweise gefolgt von Inhalt, gefolgt von einem End-Tag. Inhalt wird wiederum entweder als Element, Zeichendaten oder einige andere mögliche Dinge definiert. Ein Muster selbstreferenzieller Definitionen ist auch im Unicode-Standard enthalten:
Ein Graphem ist ein Codepunkt oder ein Zeichen.
Ein Zeichen besteht aus einer Folge von einem oder mehreren Graphemen.
Wenn er erstmals mit diesen beiden Definitionen konfrontiert den Leser könnte auf die erste Definition Objekt der Begründung , dass ein Codepunkt ist ein Charakter, aber das ist nicht immer wahr. Eine Folge von zwei Codepunkten codiert manchmal einen einzelnen Codepunkt unter
Normalisierung , und dieser codierte Codepunkt repräsentiert das Zeichen, wie in
Abbildung 2.7 dargestellt . Sequenzen von Codepunkten, die andere Codepunkte codieren. Dies wird etwas knifflig und wir haben noch nicht einmal die Ebene erreicht, in der Zeichenkodierungsschemata wie UTF-8 zum Codieren von Codepunkten in Byte-Sequenzen verwendet werden.
In einigen Kontexten kann beispielsweise ein wissenschaftlicher Artikel über
Diakritika und einzelne Teile eines Zeichens im Text selbst erscheinen. In diesem Zusammenhang kann der einzelne Zeichenteil als Zeichen betrachtet werden. Daher ist es sinnvoll, dass auch der Unicode-Standard flexibel bleibt.
Wie Mark Avery betonte, kann eine Figur zu einer komplexeren Sache zusammengesetzt werden. Das heißt, jedes Zeichen kann auf Wunsch als Graphem dienen. Das Endergebnis aller Kompositionen ist eine Sache, die "der Benutzer als Charakter betrachtet". Es scheint weder im Standard noch in dieser Diskussion einen wirklichen Widerstand gegen die Idee zu geben, dass auf höchster Ebene diese Dinge im Text enthalten sind, die der Benutzer als einzelne Zeichen betrachtet. Um eine Überladung dieses Begriffs zu vermeiden, können wir "grapheme" in allen Fällen verwenden, in denen wir auf Teile verweisen möchten, die zum Erstellen eines Zeichens verwendet werden.
Manchmal ist der Unicode-Standard mit seiner Terminologie allgegenwärtig. In Kapitel 3 wird beispielsweise
UTF-8 als "Codierungsform" definiert, während im Glossar "Codierungsform" als etwas anderes und UTF-8 als "Zeichencodierungsschema" definiert wird. Ein anderes Beispiel ist „Grapheme_Base“ und „Grapheme_Extend“, die anerkannten Fehler zu sein, aber das bestehen bleiben , weil sie das Spülen ein bisschen einer Aufgabe. Es bleibt noch viel zu tun, um die vom Standard verwendete Terminologie zu verschärfen.
Der Vorschlag zur Hinzufügung von COMBINING GRAPHEME JOINER hat sich geirrt, als festgestellt wurde, dass "Grapheme Sequenzen aus einem oder mehreren codierten Zeichen sind, die dem entsprechen, was Benutzer als Zeichen betrachten." Es sollte stattdessen lauten: "Eine Folge von einem oder mehreren Graphemen setzt das zusammen, was der Benutzer als Zeichen betrachtet." Dann könnte der Begriff "Graphemsequenz" deutlich vom Begriff "Zeichenfolge" verwendet werden. Beide Begriffe sind nützlich. "Graphemsequenz" impliziert genau den Prozess des Aufbaus eines Charakters aus kleineren Stücken. "Zeichenfolge" bedeutet, was wir alle normalerweise verstehen: "Eine Folge von Dingen, die der Benutzer als Zeichen betrachtet."
Manchmal möchte ein Programmierer wirklich auf der Ebene von Graphemsequenzen arbeiten, daher sollten Mechanismen zur Überprüfung und Bearbeitung dieser Sequenzen verfügbar sein. Im Allgemeinen reicht es jedoch aus, bei der Verarbeitung von Text "Zeichensequenzen" zu bearbeiten (was der Benutzer denkt) als Zeichen) und lassen Sie das System die Details der unteren Ebene verwalten.
In jedem Fall, der bisher in dieser Diskussion behandelt wurde, ist es sauberer, "Graphem" zu verwenden, um auf die unteilbaren Komponenten zu verweisen, und "Zeichen", um auf die zusammengesetzte Entität zu verweisen. Diese Verwendung spiegelt auch die seit langem etablierten Bedeutungen beider Begriffe besser wider.