Open Source im professionellen Einsatz
Linux-Magazin 07/2007
© bastian-dietz, photocase.com

© bastian-dietz, photocase.com

Ein Blick hinter die Kulissen der Zeichensätze und Kodierungen

Umlaute auf Umwegen

Kommen Umlaute in Programmtexten oder Daten ins Spiel, ist der Perl-Programmierer gefragt. Denn ohne seine Mithilfe entstünde ein Kodierungskauderwelsch.

560

Am Anfang war die Ascii-Tabelle: 128 Zeichen, mit denen jedermann problemlos englische Texte schreiben konnte, zusammen mit den von der Schreibmaschine bekannten Sonderzeichen wie »%« oder »$« und natürlich auch mit den Kontrollzeichen wie Zeilenumbruch, Seitenvorschub oder Terminalklingel. Als dann später einige Europäer die in ihren Sprachen heimischen Sonderzeichen einbringen wollten, wurden die einfach in die nächsten 128 Zeichen gepresst. Alle 256 Zeichen ließen sich auf diese Weise von 0 bis 255 durchnummerieren und auf dem Computer mit 8 Bits (1 Byte) kodieren.

Der ISO-8859-Standard oder salopper: Latin-1 war damit geboren. Zuerst als ISO-8859-1, aber mit der Zeit kamen weitere Varianten hinzu. Die bislang letzte Version ist ISO-8859-15, die auch das Eurozeichen enthält. Übrigens verwenden die meisten gegenwärtig Dienst tuenden Webbrowser nicht den ISO-8859-1-Standard zur Dekodierung, selbst wenn es der Webserver verlangt. Stattdessen arbeiten sie nach dem Windows-1252-Standard, der noch einige zusätzliche Zeichen und wie ISO-8859-15 das Eurozeichen definiert.

Alle wollen mitspielen

Bald wollte die restliche Welt teilhaben und die Computer sollten auch ihre zum Teil voluminösen Zeichensätze darstellen. Dazu erfanden Normierungsgremien Kodierungsschemata für asiatische Schriften wie Shift-JIS und BIG5. Aber bald erwies sich das als eine Sackgasse und das Unicode Consortium erfand die gleichnamige Kodierung: eine riesige Tabelle, die alle gängigen Zeichen aller Weltsprachen enthält.

Ein Weg, die Unicode-Tabelle auf dem Computer effektiv darzustellen, ist der UTF-8-Standard. Denn hätten herkömmliche Ascii-Zeichen plötzlich durchgehend mit zwei oder gar vier Bytes kodiert werden müssen, wäre der Platzbedarf sprunghaft angestiegen. Um die Zeichen der alten Ascii-Tabelle weiterhin mit nur einem Byte darstellen zu können, ist die UTF-8-Tabelle so angelegt, dass die ersten 128 Zeichen genau der Ascii-Tabelle entsprechen.

Die zweite Hälfte der untersten 256 Zeichen besteht jedoch zum Teil aus speziellen Maskierungs-Codes, die anzeigen, dass nach ihnen noch eine definierte Anzahl weiterer Codes folgt, die zusammen das darzustellende Zeichen aus der Unicode-Tabelle eindeutig festlegen. Zum Beispiel ist der Umlaut ü in der ISO-8859-15-Tabelle unter der Nummer 252 (»0xFC«) abgelegt. Liegt also ein Text in ISO-8859-15 vor und ein Byte hat den Wert »0xFC«, dann ist klar: Dieses Zeichen ist ein ü.

A mit Welle

Die UTF-8-Kodierung hingegen stellt den Umlaut ü mit den beiden Bytes 195 und 188 (»0xC3« und »0xBC«) dar. Liegt ein Text in UTF-8 vor und der Computer stößt erst auf einen Bytewert von »0xC3« gefolgt von »0xBC«, ist hier ebenso klar: Dort steht der Buchstabe ü.

Ist jedoch die Kodierung eines Bytestroms nicht bekannt und der Computer findet ein Byte mit dem Wert »0xC3«, dann stellt sich die Frage: Ist dies das erste Byte eines westeuropäischen Umlauts im UTF-8-Format? Oder ist das Byte nach ISO-8859-15 zu interpretieren und stellt alleine bereits die vollständige Kodierung eines Zeichens dar?

Wird das einleitende Byte »0xC3« einer UTF-8-Sequenz fälschlicherweise nach ISO-8859-15 interpretiert, kommt ein Zeichen zum Vorschein, das leidgeplagte Programmierer, die zwischen den Kodierungswelten wandeln, bis zum Überdruss kennen: das A mit Welle.

Dieses in Abbildung 1 gezeigte Zeichen kommt zwar nach [2] in der portugiesischen, vietnamesischen und der kaschubischen Schrift vor. Wer jedoch normalerweise nicht in diesen Gefilden operiert, aber ein A mit Welle erblickt, arbeitet wahrscheinlich mit einem in UTF-8 kodierten Text, der irrtümlich nach ISO-8859-15 interpretiert wurde.

Abbildung 1: In einem auf ISO-8859-15 eingestellten Terminal funktioniert die Ausgabe in Latin1, die Ausgaben nach UTF-8 ergeben Kaschubisch.

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Zeichenkünstler

    Das globale Dorf ist seit dem 1. März ein Stück weltoffener geworden: In Domainnamen sind jetzt deutsche Umlaute sowie asiatische und arabische Schriftzeichen erlaubt. Damit eröffnen sich für Entwickler und Benutzer neue Möglichkeiten, es ergeben sich aber auch neue Probleme.

  • Encoding

    Moderne Linux-Distributionen benutzen in Zeiten der Globalisierung Unicode, meist in der Ausprägung UTF-8. Vor dieser Ära entstandene ISO-Textdateien lassen sich noch relativ einfach konvertieren. Eine ganze Datenbank ins Heute zu bringen, erfordert Fingerspitzengefühl.

  • Bash Bashing

    Plaintext digital zu speichern oder zu übertragen erweist sich in der Praxis als bei Weitem nicht so trivial, wie es die Theorie vorsieht. Inkompatibel kodierte Dateien und unleserliche URL-Anfragen sind typische Alltagsphänomene. Manchmal vermag die Bash mit trickreichen Skripten zu helfen.

  • Abschrift

    Immer mehr Linux-Systeme nutzen UTF-8 statt ISO-8859 für die Zeichenkodierung. Beim Update einer Distribution entsteht ohne Konvertierung schnell Datenmüll. Ein Migrationsleitfaden.

  • Gesetzte Typen

    Ein genauer Blick auf das Thema Fonts in Java-Programmen lohnt sich, denn ein umfangreiches API kann Schriften auf viele Arten verändern. Grundlagenwissen über Schriftfamilien und -technologien ist hilfreich, um dieses Potenzial besser auszuschöpfen.

comments powered by Disqus

Ausgabe 07/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.