Unicode-Äquivalenz - Unicode equivalence

Unicode Äquivalenz ist die Spezifikation durch die Unicode Zeichenstandardcodierung , dass einige Sequenzen von Codepunkten im Wesentlichen den gleichen Charakter darstellen. Dieses Feature wurde in der Norm eingeführt Kompatibilität zu ermöglichen , mit bereits existierenden Standard - Zeichensätze , die oft ähnliche oder identische Zeichen enthalten.

Unicode bietet zwei solcher Begriffe, kanonische Äquivalenz und Kompatibilität. Es wird davon ausgegangen, dass Codepunktsequenzen, die als kanonisch äquivalent definiert sind, beim Drucken oder Anzeigen das gleiche Aussehen und die gleiche Bedeutung haben. Beispielsweise wird der Codepunkt U+006E (der lateinische Kleinbuchstabe "n") gefolgt von U+0303 (die kombinierende Tilde "◌̃") von Unicode als kanonisch äquivalent zum einzelnen Codepunkt U+00F1 (der Kleinbuchstaben .) definiert Buchstabe " ñ " des spanischen Alphabets ). Daher sollten diese Sequenzen auf die gleiche Weise angezeigt werden, sollten von Anwendungen wie der Alphabetisierung von Namen oder der Suche auf die gleiche Weise behandelt werden und können gegeneinander ausgetauscht werden. In ähnlicher Weise kann jeder Hangul- Silbenblock, der als einzelnes Zeichen kodiert ist, äquivalent als Kombination aus einem führenden, verbindenden Jamo, einem Vokal-verbundenen Jamo und gegebenenfalls einem nachgestellten, verbindenden Jamo kodiert werden.

Es wird davon ausgegangen, dass Sequenzen, die als kompatibel definiert sind, möglicherweise unterschiedliche Erscheinungen haben, aber in einigen Kontexten dieselbe Bedeutung haben. So wird beispielsweise der Codepunkt U+FB00 (die typografische Ligatur „ff“) als kompatibel – aber nicht kanonisch äquivalent – ​​zur Folge U+0066 U+0066 (zwei lateinische „f“-Buchstaben) definiert. Kompatible Sequenzen können in einigen Anwendungen (wie Sortieren und Indizieren ) auf die gleiche Weise behandelt werden , in anderen jedoch nicht; und können in einigen Situationen gegeneinander ausgetauscht werden, in anderen jedoch nicht. Kanonisch äquivalente Sequenzen sind ebenfalls kompatibel, aber das Gegenteil ist nicht unbedingt der Fall.

Der Standard definiert auch ein Textnormalisierungsverfahren namens Unicode-Normalisierung , das äquivalente Zeichenfolgen ersetzt, sodass zwei beliebige Texte, die äquivalent sind, auf dieselbe Sequenz von Codepunkten reduziert werden, die als Normalisierungsform oder Normalform des Originaltexts bezeichnet wird. Für jeden der beiden Äquivalenzbegriffe definiert Unicode zwei Normalformen, eine vollständig zusammengesetzt (wo mehrere Codepunkte nach Möglichkeit durch einzelne Punkte ersetzt werden) und eine vollständig zerlegt (wo einzelne Punkte in mehrere aufgeteilt werden).

Äquivalenzquellen

Zeichenvervielfältigung

Aus Kompatibilitäts- oder anderen Gründen weist Unicode manchmal Entitäten, die im Wesentlichen das gleiche Zeichen aufweisen, zwei verschiedene Codepunkte zu. Beispielsweise kann das Zeichen "Å" als U+00C5 (Standardname "LATIN CAPITAL LETTER A WITH RING ABOVE", ein Buchstabe des Alphabets in Schwedisch und mehreren anderen Sprachen ) oder als U+212B ("ANGSTROM SIGN" ). Das Symbol für Angström ist jedoch als dieser schwedische Buchstabe definiert, und die meisten anderen Symbole, die Buchstaben sind (wie "V" für Volt ) haben nicht für jede Verwendung einen separaten Codepunkt. Im Allgemeinen werden die Codepunkte von wirklich identischen Zeichen (die in Unicode-Schriften auf die gleiche Weise wiedergegeben werden können) als kanonisch äquivalent definiert.

Kombinieren und vorkomponierte Zeichen

Aus Gründen der Konsistenz mit einigen älteren Standards bietet Unicode für viele Zeichen einzelne Codepunkte, die als modifizierte Formen anderer Zeichen (wie U+00F1 für "ñ" oder U+00C5 für "Å") oder als Kombinationen von zwei oder angesehen werden können mehr Zeichen (wie U+FB00 für die Ligatur „ff“ oder U+0132 für den niederländischen BuchstabenIJ “)

Aus Gründen der Konsistenz mit anderen Standards und für mehr Flexibilität bietet Unicode auch Codes für viele Elemente, die nicht allein verwendet werden, sondern stattdessen dazu gedacht sind, ein vorangehendes Basiszeichen zu ändern oder zu kombinieren . Beispiele für diese Kombinationszeichen sind die kombinierende Tilde und das japanische diakritische Dakuten ("◌゛", U+3099).

Im Kontext von Unicode ist Zeichenkomposition der Vorgang, bei dem die Codepunkte eines Basisbuchstabens gefolgt von einem oder mehreren kombinierten Zeichen zu einem einzigen vorkomponierten Zeichen ersetzt werden ; und die Charakterzerlegung ist der entgegengesetzte Prozess.

Im Allgemeinen werden vorkomponierte Zeichen als kanonisch äquivalent zur Sequenz ihres Grundbuchstabens und der anschließenden Kombination von diakritischen Zeichen definiert, in welcher Reihenfolge auch immer diese auftreten können.

Beispiel

Amélie mit seinen zwei kanonisch äquivalenten Unicode- Formen ( NFC und NFD )
NFC-Charakter EIN m é l ich e
NFC-Codepunkt 0041 006d 00e9 006c 0069 0065
NFD-Codepunkt 0041 006d 0065 0301 006c 0069 0065
NFD-Charakter EIN m e l ich e

Typografische Nichtinteraktion

Einige Skripte verwenden regelmäßig mehrere Kombinationszeichen, die im Allgemeinen nicht typografisch interagieren und keine vorkomponierten Zeichen für die Kombinationen haben. Paare solcher nicht-wechselwirkender Markierungen können in beliebiger Reihenfolge gespeichert werden. Diese alternativen Sequenzen sind im Allgemeinen kanonisch äquivalent. Die Regeln, die ihre Reihenfolge in der kanonischen Form definieren, definieren auch, ob sie als interagierend betrachtet werden.

Typografische Konventionen

Unicode bietet Codepunkte für einige Zeichen oder Zeichengruppen, die nur aus ästhetischen Gründen modifiziert werden (wie Ligaturen , Katakana- Zeichen halber Breite oder lateinische Buchstaben doppelter Breite zur Verwendung in japanischen Texten) oder um neue Semantiken hinzuzufügen, ohne Verlust des Originals (wie Ziffern in tiefgestellten oder hochgestellten Positionen oder eingekreiste Ziffern (wie "①"), die von einigen japanischen Schriftarten übernommen wurden). Eine solche Sequenz wird als kompatibel mit der Sequenz der ursprünglichen (einzelnen und nicht modifizierten) Zeichen angesehen, zugunsten von Anwendungen, bei denen das Erscheinungsbild und die hinzugefügte Semantik nicht relevant sind. Die beiden Sequenzen werden jedoch nicht als kanonisch äquivalent deklariert, da die Unterscheidung einen gewissen semantischen Wert hat und die Wiedergabe des Textes beeinflusst.

Codierungsfehler

UTF-8 und UTF-16 (und auch einige andere Unicode-Kodierungen) lassen nicht alle möglichen Sequenzen von Codeeinheiten zu . Unterschiedliche Software konvertiert ungültige Sequenzen in Unicode-Zeichen unter Verwendung unterschiedlicher Regeln, von denen einige sehr verlustbehaftet sind (zB alle ungültigen Sequenzen in dasselbe Zeichen umwandeln). Dies kann als eine Form der Normalisierung angesehen werden und kann zu den gleichen Schwierigkeiten führen wie andere.

Normalisierung

Die Implementierung von Unicode-String-Suchen und -Vergleichen in Textverarbeitungssoftware muss das Vorhandensein äquivalenter Codepunkte berücksichtigen. Ohne dieses Merkmal wären Benutzer, die nach einer bestimmten Codepunktsequenz suchen, nicht in der Lage, andere visuell nicht unterscheidbare Glyphen zu finden, die eine andere, aber kanonisch äquivalente Codepunktdarstellung aufweisen.

Unicode stellt Standardnormalisierungsalgorithmen bereit, die eine eindeutige (normale) Codepunktsequenz für alle äquivalenten Sequenzen erzeugen; die Äquivalenzkriterien können entweder kanonisch (NF) oder kompatibel (NFK) sein. Da das repräsentative Element einer Äquivalenzklasse beliebig gewählt werden kann , sind für jedes Äquivalenzkriterium mehrere kanonische Formen möglich. Unicode stellt zwei Normalformen zur Verfügung, die für jedes der beiden Kompatibilitätskriterien semantisch aussagekräftig sind: die zusammengesetzten Formen NFC und NFKC und die zerlegten Formen NFD und NFKD. Sowohl die zusammengesetzte als auch die zerlegte Form erlegen der Codepunktsequenz eine kanonische Ordnung auf, die notwendig ist, damit die normalen Formen eindeutig sind.

Um Unicode-Strings zu vergleichen oder zu durchsuchen, kann Software entweder zusammengesetzte oder zerlegte Formen verwenden; diese Wahl spielt keine Rolle, solange sie für alle Zeichenfolgen, die an einer Suche, einem Vergleich usw. beteiligt sind, gleich ist. Andererseits kann die Wahl der Äquivalenzkriterien die Suchergebnisse beeinflussen. Zum Beispiel haben einige typografische Ligaturen wie U+FB03 (ffi), römische Ziffern wie U+2168 (Ⅸ) und sogar tiefgestellte und hochgestellte , zB U+2075 (⁵) ihre eigenen Unicode-Codepunkte. Die kanonische Normalisierung (NF) hat keinen Einfluss auf diese, aber die Kompatibilitätsnormalisierung (NFK) zerlegt die ffi-Ligatur in die einzelnen Buchstaben, sodass eine Suche nach U+0066 (f) als Teilzeichenfolge in einer NFKC-Normalisierung von U+FB03 erfolgreich wäre aber nicht in der NFC-Normalisierung von U+FB03. Ebenso bei der Suche nach dem lateinischen Buchstaben I (U+0049) in der vorkomponierten römischen Zahl Ⅸ (U+2168). In ähnlicher Weise wird das hochgestellte "⁵" (U+2075) durch die Kompatibilitätsabbildung in "5" (U+0035) umgewandelt.

Das Umwandeln hochgestellter Zeichen in Basislinien-Äquivalente ist jedoch für Rich-Text- Software möglicherweise nicht geeignet , da die hochgestellten Informationen dabei verloren gehen. Um diese Unterscheidung zu ermöglichen, enthält die Unicode-Zeichendatenbank Kompatibilitätsformatierungs-Tags , die zusätzliche Details zur Kompatibilitätstransformation bereitstellen. Im Fall von typografischen Ligaturen ist dieses Tag einfach <compat>, während es für hochgestellte <super>. Rich-Text-Standards wie HTML berücksichtigen die Kompatibilitäts-Tags. Zum Beispiel verwendet HTML sein eigenes Markup, um ein U+0035 in einer hochgestellten Position zu positionieren.

Normalformen

Die vier Unicode-Normalisierungsformen und die Algorithmen (Transformationen), um sie zu erhalten, sind in der folgenden Tabelle aufgeführt.

NFD-
Normalisierungsform kanonische Zerlegung
Zeichen werden nach kanonischer Äquivalenz zerlegt, und mehrere Kombinationszeichen werden in einer bestimmten Reihenfolge angeordnet.
NFC-
Normalisierungsform kanonische Zusammensetzung
Zeichen werden zerlegt und dann nach kanonischer Äquivalenz neu zusammengesetzt.
NFKD-
Normalisierungsformkompatibilitätszerlegung
Zeichen werden nach Kompatibilität zerlegt, und mehrere Kombinationszeichen werden in einer bestimmten Reihenfolge angeordnet.
Zusammensetzung der NFKC-
Normalisierungsformkompatibilität
Zeichen werden nach Kompatibilität zerlegt und dann nach kanonischer Äquivalenz neu zusammengesetzt.

Alle diese Algorithmen sind idempotente Transformationen, was bedeutet, dass eine Zeichenfolge, die bereits in einer dieser normalisierten Formen vorliegt, bei einer erneuten Verarbeitung durch denselben Algorithmus nicht verändert wird.

Die Normalformen sind nicht geschlossen unter String - Verkettung . Bei fehlerhaften Unicode-Strings, die mit einem Hangul-Vokal beginnen oder mit einem abschließenden conjoining jamo beginnen , kann die Verkettung die Komposition unterbrechen .

Sie sind jedoch nicht injektiv (sie bilden verschiedene ursprüngliche Glyphen und Sequenzen auf dieselbe normalisierte Sequenz ab) und somit auch nicht bijektiv (können nicht wiederhergestellt werden). Zum Beispiel werden die unterschiedlichen Unicode-Strings "U+212B" (das Angström-Zeichen "Å") und "U+00C5" (der schwedische Buchstabe "Å") beide durch NFD (oder NFKD) in die Sequenz "U+0041" erweitert U+030A" (lateinischer Buchstabe "A" und Kombinationsring über "°"), der dann durch NFC (oder NFKC) auf "U+00C5" (der schwedische Buchstabe "Å") reduziert wird.

Ein einzelnes Zeichen (außer einem Hangul-Silbenblock), das bei der Normalisierung durch ein anderes ersetzt wird, kann in den Unicode-Tabellen dadurch identifiziert werden, dass es ein nicht leeres Kompatibilitätsfeld, aber kein Kompatibilitäts-Tag hat.

Kanonische Bestellung

Die kanonische Ordnung befasst sich hauptsächlich mit der Ordnung einer Folge von Kombinationszeichen. Für die Beispiele in diesem Abschnitt gehen wir davon aus, dass diese Zeichen diakritische Zeichen sind , obwohl im Allgemeinen einige diakritische Zeichen keine Kombinationszeichen sind und einige kombinierende Zeichen keine diakritischen Zeichen sind.

Unicode weist jedem Zeichen eine Kombinationsklasse zu , die durch einen numerischen Wert identifiziert wird. Nicht-kombinierende Zeichen haben die Klassennummer 0, während kombinierte Zeichen einen positiven Wert für die Kombinationsklasse haben. Um die kanonische Ordnung zu erhalten, muss jede Teilkette von Zeichen mit einem Kombinationsklassenwert ungleich Null nach dem Kombinationsklassenwert unter Verwendung eines stabilen Sortieralgorithmus sortiert werden. Eine stabile Sortierung ist erforderlich, da angenommen wird, dass die Kombination von Zeichen mit demselben Klassenwert typografisch interagiert, sodass die beiden möglichen Reihenfolgen nicht als gleichwertig angesehen werden.

Zum Beispiel hat das Zeichen U+1EBF (ế), das im Vietnamesischen verwendet wird , sowohl einen akuten als auch einen Zirkumflex-Akzent. Seine kanonische Zerlegung ist die Dreizeichenfolge U+0065 (e) U+0302 (Zirkumflex) U+0301 (akuter Akzent). Die Kombinationsklassen für die beiden Akzente sind beide 230, daher entspricht U+1EBF nicht U+0065 U+0301 U+0302.

Da nicht alle Kombinationssequenzen ein vorkomponiertes Äquivalent haben (die letzte im vorherigen Beispiel kann nur auf U+00E9 U+0302 reduziert werden), ist sogar die normale Form NFC vom Verhalten der Kombinationszeichen betroffen.

Fehler aufgrund von Normierungsunterschieden

Wenn zwei Anwendungen Unicode-Daten gemeinsam nutzen, sie aber unterschiedlich normalisieren, können Fehler und Datenverluste die Folge sein. In einem bestimmten Fall hat OS X Unicode-Dateinamen normalisiert, die von der Samba -Software zur gemeinsamen Datei- und Druckerfreigabe gesendet wurden . Samba erkannte die geänderten Dateinamen nicht als äquivalent zum Original, was zu Datenverlust führte. Die Lösung eines solchen Problems ist nicht trivial, da die Normalisierung nicht verlustfrei umkehrbar ist.

Siehe auch

Anmerkungen

Verweise

Externe Links