Unicode, ISO-8859-1 und noch mehr Zeichensalat
Heute wollen wir uns dem Thema Content einmal von einer ganz anderen Perspektive aus widmen und zwar genau genommen seiner Darstellung. Nein, nein, damit meine ich nicht, welches Layout zum Einsatz kommt oder welche Farbgebung gewählt wird. Die Rede ist von Schrift, d.h. der lesbaren Darstellung von Text. Und natürlich von all den Fallstricken im IT- und insbesondere Web-Umfeld, die hier auf uns lauern.
Der Artikel ist Teil 1 einer Blogreihe, die sich mit Unicode, Zeichensätzen und typischen Problemen in unserem Agenturalltag beschäftigt:
- Unicode, ISO-8859-1 und noch mehr Zeichensalat
- UTF-8 und die Frage, wie Unicode in den Rechner kommt
- Ordnung ins Chaos bringen: UTF-8, Datenbanken und die Herausforderungen im Web
Ab in die gute, alte Zeit
Blick zurück ins Jahr 1993: Nicht-lateinische Schriftsprachen waren in unseren Breiten noch kaum verbreitet. Die IT hieß noch EDV, alle Mitarbeiter blickten auf 80 Zeichen breite Textbildschirme (wahlweise hellgrau, grün oder bernsteinfarben auf schwarzem Hintergrund) und die Bedürfnisse der hiesigen datenverarbeitenden Zunft endeten oft an der Oder-Neiße-Grenze. Mit ASCII kam man locker durch alle Lebenslagen – 7 bzw. 8 Bit pro Zeichen, je nach Definition – und 640K sollten ja eh genug für Jedermann sein.
Desktop-Publishing (DTP) war zwar schon ein Thema, aber erst mit der breiten Einführung von graphischen Betriebssystemen (Windows 3.11 lässt grüßen) wurde diese Technologie massentauglich. Jetzt wurde jede Schülerzeitung am PC entworfen und TrueType eroberte die Welt. Das westliche Abendland sprach durchweg Latin-1 (genaugenommen: ISO-8859-1) und alle waren zufrieden. Bis dann um die Jahrtausendwende der Euro mit seinem € eingeführt wurde und sich ganz Europa mit so etwas wie Zeichensätzen beschäftigen musste.
Denn plötzlich war es wichtig, dass die eingesetzte Hausschrift „€-fähig“ war und hastig wurden die ersten Hacks erarbeitet. Wer weiß, wie lange danach noch fleißig „=“ über ein „C“ gedruckt wurden, weil die eingesetzten Systeme und Schriften das Zeichen noch nicht kannten?
Unicode to the rescue!
Nachdem bereits ein einzelnes neues Zeichen die digitale Szene derart Kopf gestellt hatte, begriff man, dass es einer nachhaltigeren Lösung bedarf. Da schnell klar war, dass man mit den 256 Bitkombinationen, die 1 Byte lange Zeichen boten, nicht alle Schriftsysteme der Welt würde abbilden können, machte man direkt Nägel mit Köpfen. Mit Unicode wurde ein Standard geschaffen, der eine Kodierung mit derzeit 1.114.112 theoretisch möglichen Symbolen umfasst, von denen aktuell etwa 143.000 vergeben wurden. Unicode definiert hierbei sog. Codepoints, d.h. vereinfacht gesagt: Es nimmt alle bekannten Schriftzeichen und nummeriert sie einfach durch. Jedes Zeichen bekommt eine Nummer und man kann jedes Zeichen in der großen Liste nachschlagen, z.B. Nr. 129335 für 🤷. Der Abwärtskompatibilität wegen definiert man die ersten 128 Einträge als kompatibel zu ASCII.
Lesson learned: Wie wir schon schon von IPv4 gelernt haben, wird es in der IT immer dann spannend, wenn der Satz fällt: „Wird schon reichen.“ 🙂
An dieser Stelle könnte diese Geschichte zu Ende sein. Allerdings stellen sich da noch zwei Probleme dar.
Text und Schrift sind gar nicht so einfach, …
Fangen wir zunächst mit dem Komplizierteren an: Dazu müssen wir zunächst kurz unsere germanische Brille absetzen und uns fragen: Was genau ist denn ein „Schriftzeichen“?
Die erste Antwort ist höchstwahrscheinlich: Naja, vermutlich meint das einen Buchstaben. Doch ein Blick westlich des Elsass und die Antwort wird schon komplizierter. Der Franzose kennt neben dem „e“ auch das „é“ (mit accent aigu) und das „è“ (mit accent grave). Jeder weiß, dass man diese Zeichen auf einer deutschen Tastatur in zwei Schritten tippt – erst den Akzent und dann das „e“. Unicode bildet das genauso ab, d.h. es gibt einen Codepoint für das „e“ und solche für die Akzente, die man auch zu den sogenannten diakritischen Zeichen zählt.
Die Schlauberger werden jetzt vielleicht sagen: „Moment, gerade eben hieß es noch, ASCII-Zeichen können weiterverwendet werden und ein ‚é‘ gabs ganz sicher schon zu DOS-Zeiten“.
Das stimmt auch. Tatsächlich findet man in Unicode viele Zeichen mehrfach und auch in mehreren Zusammensetzungen, z.B. wie hier als Gesamtpaket und in Einzelteilen. Ein Grund dafür ist, dass es etwa im asiatischen Raum gang und gäbe ist, Zeichen auf verschiedene Weisen zu kombinieren. Es lohnt sich daher, diakritische Zeichen separat abzubilden, um insgesamt weniger Kombinationen und damit Codepoints definieren zu müssen. Die Print-Experten unter euch mögen mir verzeihen, dass ich an dieser Stelle nicht auch noch auf Ligaturen usw. eingehe, die es ja auch noch gibt und die tatsächlich als separate Unicode-Codepoints existieren. Aber das würde jetzt wirklich zu weit führen.
… aber hättet ihr gedacht, dass sie so komplex sind?
Noch ein Beispiel für die Komplexität des Ganzen: Wenn sich zwei Hindus in einem WhatsApp-Chat begrüßen würden, würden sie das möglicherweise mit der Floskel नमस्ते tun – uns eher latinisiert als „namaste“ bekannt. Jetzt die Preisfrage: Wieviele Zeichen sind das?
Hm. Wir markieren das Wörtchen sukzessive mit der Maus und stellen möglicherweise so wie ich (Chrome unter macOS) fest, dass der Cursor dreimal „einrastet“; also vielleicht drei Zeichen? Leider falsch. Die korrekte Antwort lautet wie so oft: Kommt drauf an. 🙂
Nämlich darauf, ob man mit „Zeichen“ sog. Unicode-Grapheme meint (das Unteilbare, quasi die Schrift-Atome): dann wäre die Antwort Sechs. Oder ob man lieber sog. Unicode-Graphemhaufen zählen möchte. Unter einem Graphemhaufen versteht Unicode nicht etwa die Bildzeitung im Altpapiercontainer, sondern ein Basiszeichen plus alle diakritischen Zeichen, die es ergänzen. Das kommt am Ende dem bekannten „Buchstaben“ recht nahe. Bei diesem Vorgehen kommen wir auf vier solcher „Haufen“: „न“, „म“, „स्“ und „ते“. Wie kommt man jetzt auf drei? Die unbefriedigende Wahrheit: idealerweise gar nicht, denn drei ist definitiv falsch. Unicode-Unterstützung abseits westlicher Sprachen ist oft immer noch unvollständig und an allen Ecken und Enden wimmelt es vor Bugs. Heerscharen von Entwicklern trieb es schon zur Verzweiflung, dass solche UTF-8-Strings wie oben aus vier Zeichen (bei „Zeichen“ immer an die Haufen denken!) bestanden, die aus sechs Unicode-Codepoints zusammengesetzt sind und in UTF-8 dann 18 Bytes belegen.
Im nächsten Blogpost dieser Reihe bringe ich den Computer im Zusammenhang mit Unicode ins Spiel und erzähle, wieso jeder Unicode-geplagte Entwickler auf kurz oder lang ein Schei�-Encoding-T-Shirt braucht 😉
Du trägst so ein T-Shirt aus Überzeugung? Dann bewirb dich bei uns!
Wir freuen uns, wenn Ihr diesen Beitrag teilt.
Kommentare
Keine Kommentare gefunden.