Tim Tepaße: Brüche & mehr als man über Zeichen in Unicode wissen will

Beitrag lesen

Hallo Twilo,

gibt es für 1/1 im utf-8 Zeichensatz ein Zeichen?

Jain. Man drückt das im Unicode Zeichensatz mit drei Zeichen aus:

1⁄1

Abhängig von Betriebssystem und Ausstattung siehst Du dort wahrscheinlich nur die Zeichenkette "1/1" oder gar eine Fragezeichen oder ein Kästchen. Das, was da steht ist nicht dasselbe wie die Zeichenkette "1/1". Es sieht nur ähnlich aus. Du hast diese drei Unicode-Zeichen eingegeben:

1 - U+0031 DIGIT ONE
  / - U+002F SOLIDUS
  1 - U+0031 DIGIT ONE

... während ich diese drei Unicode-Zeichen eingegeben habe:

1 - U+0031 DIGIT ONE
  ⁄ - U+2044 FRACTION SLASH
  1 - U+0031 DIGIT ONE

Der normale Schrägstrich (Solidus), den man durch Shift-7 erhält, also nicht dasselbe Zeichen wie dieser ominöse Fraction Slash. Warum gibt es in Unicode also nun unterschiedliche Schrägstriche?

Unicode unterscheidet nicht nur zwischen gespeicherter Information („Zeichen“) und dargestellter Erscheinungsform je nach Schriftart („Glyph“) sondern hat noch einen Zwischenschritt, grapheme bzw. grapheme Cluster. D.h. etwas, dass aus dem Bildschirm erscheint ist ein Glyph, das eine durch eine Schriftart bestimmte Darstellung für ein bestimmtes Grapheme Cluster ist. Dieses Grapheme Cluster wird durch ein oder mehrere Zeichen definiert. (Und im Speicher des Computers oder auf der Leitung kann ein Zeichen in durch die jeweilige Kodierung bestimmten verschiedene ein oder mehrere Bytes repräsentiert werden, aber das ist ein anderes Thema). Klingt alles sehr kompliziert, aber Unicode bildet auch nur die tatsächliche Komplexität ab, die wir Menschen bei unseren Schreibsystemen in den letzten 4000 Jahren oder so entwickelt haben. Du suchtest also nach dem Graphem einer bestimmten Darstellung (Den Glyph für 1/1) und dieser Graphem wird durch drei Zeichen bestimmt. Dummerweise wird dieser Graphem nicht richtig dargestellt.

Klingt alles sehr theoretisch, hier mal konkret. Du willst ein großes A mit einem Kringel drüber auf den Bildschirm kriegen. Den konkreten Glyph bestimmt die Schriftart, Du suchst also nach dem Graphem für "A mit Kringel". Dieser besteht aus zwei Zeichen, dem A und dem Kringel:

A - U+0041 LATIN CAPITAL LETTER A
  ̊ - U+030A COMBINING RING ABOVE

Das in dieser Schriftart kaum erscheinende Zeichen für den Kringel ist ein sogenanntes Combining Mark. Dieser verbindet sich mit dem davorstehenden Zeichen zu einem Grapheme (Cluster), d.h. zu dem, was Otto Normalmensch als Buchstaben versteht. Das ist wie bei Akzenten. Der Buchstabe á besteht je in der Theorie aus den Zeichen a und ´, ist aber trotzdem ein eigener Buchstabe.

Das Zeichen FRACTION SLASH ist nun auch so kombinierendes Zeichen. Laut Unicode Standard, Kapitel 6 kombiniert es es direkt davorstehende Zahlen mit direkt dahinder stehende Zahlen zu einer Einheit, die dann einen Bruch darstellt. Sprich: Die Zeichenkette ...

abd<U+2044>xyz

... ist dann ein Bruch, wenn die Zeichen a, b, c, x, y und z der Klasse Nd (=Zahl) angehören. Es gibt also entgegen anderer Äußerungen hier doch eine Variante beliebige Brüche in Unicode auszudrücken.

Dummerweise erhält man durch die Möglichkeit, Brüche schreiben zu können, nicht die Gewissheit, dass dieser Bruch auch richtig dargestellt wird. Das obige bezieht sich nur auf den Grapheme Cluster (der logische Ausdruck eines Bruches), nicht auf die visuelle Darstellung (das konkrete Schriftzeichen auf dem Bildschirm, der Glyph).

Im Unicode-Standard steht zwar, dass dieses Zeichenkette ...

1⁄2

... mit diese Darstellung ...

[latex]\frac{1}{2}[/latex]

... oder als Vulgärbruch mit schrägem Strich ...

½

... dargestellt werden soll, dass das aber von der darstellenden Software  und eventuellen Formatierungsoptionen ausserhalb der Unicode-Zeichen abhängt. Und wenn die Software es nicht als Bruch umrechnen und darstellen kann, dann lautet die Fallback-Darstellung eben so:

1/2

Die allgemein gängige Software tut sich damit schwer, ich habe zumindest noch keine Brüche darstellende Software gefunden. Selbst ATSUI, Apples Textdarstellungs-Dings tut sich damit und Apple ist eigentlich ziemlich gut mit so etwas.

Man kann also Brüche in Unicode logisch ausdrücken, hat aber keine Sicherheit, dass die Darstellung so aussieht, wie man das will. Eigentlich genau wie bei den meisten exotischen Unicode-Zeichen.

Für 1/2 gibt es ½, etc..

Dass nicht alle zusammengesetzten Grapheme aus zusammengesetzten Zeichen bestehen, sondern dass es oft für die meistgebräuchlichsten Grapheme eigene Zeichen gibt, hat zwei Gründe, einmal historische, einmal semantische.

Historisch deswegen, weil viele Vorgängerzeichensätze schon Zeichen für zusammengesetztes mitbrachten, z.B. für Ligaturen wie fi. Man wollte da offenbar keinen richtigen Bruch machen und nahm die Zeichen dann einfach mit. Ausserdem kann man nicht für jede mögliche Kombination von Basiszeichen und Kombinierenden Zeichen ein eigenes Zeichen setzen, dass geht sehr schnell in astronomische Zahlen.

Der semantische Grund ist einfach, dass Zeichen im Unicode-Zeichensatz jeweils eine bestimmte Bedeutung besitzen. D.h. zwei Zeichen sind nicht einfach gleich, weil sie ähnlich aussehen, sie müssen auch dasselbe bedeuten. Am Beispiel von A-mit-Kringel. Zusammengesetzt aus zwei Zeichen ist es diese Zeichenkette

A - U+0041 LATIN CAPITAL LETTER A
   ̊ - U+030A COMBINING RING ABOVE

Aber es gibt auch (vermutlich historisch begründet) ein Zeichen, das beides in einem Zeichen kombiniert:

Å - U+00C5 LATIN CAPITAL A WITH RING ABOVE

Und jetzt kommt der Unterschied: Dieses Zeichen steht auch für eine physikalische Längeneinheit von Längen im atomaren Bereich: Ångström, benannt nach dem gleichnamigen Physiker. Ein Zeichen für eine physikalische Einheit trägt also eine andere Bedeutung als nur ein Buchstabe, es ist immerhin eine Einheit. Konsequenterweise gibt es also noch dieses Zeichen:

Å - U+212B ANGSTROM SIGN

Es gibt also drei Zeichen bzw. Zeichenketten mit derselben Darstellung.

Und nein, das dadurch erzeugte Chaos ist nicht unlösbar. Unicode bietet zu solchen Verdoppelungen bevorzugte Darstellungen an, das Ångström-Zeichen wird bevorzugt durch U+00C5 dargestellt. Und auch bei anderen computertechnischen Problemen wie Sortierung gibt es Abhilfe, solche Zeichen(ketten) werden nämlich normalisiert und in ihre Komponenten zerlegt, ehe sie verglichen werden. Nur gibt es vier Normalisierungsvarianten, es wird also wieder alles komplizierter. Niemand hat gesagt, dass es leicht sei, alle Schriftsysteme der Welt in einem Standard zusammenzufasssen.

An Deiner Stelle würde ich aber entweder die nicht-kosmetische Variante des Bruchs nehmen; mathematische Formeln in normalen Text sind gelinde gesagt schwierig. Oder was ganz anderes, je nachdem, was Du ausdrücken willst.

Schonmal an Prozent oder Balkendiagramme gedacht?

Tim