XML-Know How

Einheitliche Zeichenkodierung - Grundlage der Systemunabhängigkeit

Medienneutrale Datenhaltung bedeutet nicht nur, dass die Daten für die Ausgabe in diversen Medien geeignet sind. Es bedeutet in der Praxis zunächst, dass dieselben Daten mit ganz unterschiedlicher Software auf Rechnern beliebigen Typs und mit beliebigem Betriebssystem »laufen sollen«, ohne dass eine Konvertierung nötig ist.

Eine der Grundvoraussetzungen dafür ist eine einheitliche Zeichenkodierung. Im folgenden Beitrag erfahren Sie alles über die wichtigsten Standards und deren Vor- und Nachteile.

Wohl jeder kennt das Phänomen, dass ein Textdokument – sei es eine Textdatei, ein Word-Dokument, eine E-Mail oder eine Web-Seite – an manchen Stellen statt der erwarteten Zeichen seltsame Sonderzeichen aufweist.

Oft liegt das daran, dass die Software, mit der das Dokument gelesen wird, eine andere ist als die, mit der es erzeugt wurde. Man muss leider feststellen: für gleiche Zeichen gibt es softwareseitig unterschiedliche Kodierungen.

Doch nicht nur die eingesetzte Software kann Kompatibilitätsprobleme zur Folge haben: Auch die diversen Betriebssysteme verwalten die Daten intern unterschiedlich, so dass eine Mac-OS-Datei nicht ohne weiteres auf einem Windows-Rechner gelesen werden kann. Weitere Probleme ergeben sich auch durch unterschiedliche Ländereinstellungen, unter denen die Rechner betrieben werden können: Eine Datei, die auf einem Rechner mit deutschsprachigem Betriebssystem völlig korrekt angezeigt wird, kann in den USA völlig korrupt erscheinen, weil z. B. Umlaute durch andere Zeichen ersetzt worden sind.

Die Ursache der Kompatibilitätsprobleme zwischen den Systemen ist immer die gleiche und hat ihre Wurzeln in der Rechnerarchitektur: Standardmäßig wird heute zur Speicherung eines Zeichens ein Byte Speicherplatz belegt. Ein Byte, das aus acht Bit (= acht logische 1- bzw. 0-Zustände) besteht, kann 28 = 256 unterschiedliche Zustände annehmen. Damit ist auf einem Byte eines von maximal 256 unterschiedlichen Zeichen abbildbar. Dieser Code wird oft irrtümlich als ASCII-Code bezeichnet; der eigentliche ASCII-Code1 ist in der ISO-Norm 646 als ein 7-Bit-Code festgelegt und umfasst daher nur 128 Zeichen.[1] Diese Beschränkung hat historische Gründe: als Speicherplatz noch knapp und die Preise dafür sehr hoch waren, gab es eine Reihe von Versuchen, mit möglichst wenig Bits möglichst viele Zeichen darzustellen. So gab es zunächst Rechner und Betriebssysteme, die mit 6 Bit pro Zeichen und damit mit max. 64 verschiedenen Zeichen arbeiteten. Letztendlich konnte sich aber nur ASCII durchsetzen. Mit der Erweiterung von 7- auf 8-Bit-Kodierung wurden 256 Zeichen verfügbar (ASCII 256 oder ANSI nach dem American National Standards Institute).

ASCII-Zeichentabelle. Sie stimmt mit der internationalen Referenzversion des 7-Bit-ISO-646-Zeichensatzes bis auf das Währungssymbol (Speicheradresse 24 »$«) überein. Im Metrisch-Zeichensatz erscheint hier das generische Währungssymbol »¤«. Die ersten 32 (hexadezimal 0×20) Einträge des ASCII-Codes enthalten Steuersymbole, von denen allerdings viele heute ungebräuchlich geworden sind.

Da es nun weit mehr als 256 benötigte Zeichen gibt, die darüberhinaus länderspezifisch sehr verschieden sein können (Akzente im Französischen, Umlaute im Deutschen, andere Zeichenformen im Kyrillischen oder Griechischen etc.), sind diese 256 Speicherplätze weltweit nicht mit identischen Zeichen belegt, sondern unterscheiden sich in der Belegung von Region zu Region. Diese länderspezifischen Kodierungssysteme nennt man auch »Codepages«. Unterschiedliche Codepages können denselben Code für verschiedene Zeichen benutzen, oder verschiedene Codes für dasselbe Zeichen. Jeder Computer muss daher viele verschiedene Kodierungssysteme unterstützen. Wenn Texte zwischen verschiedenen Kodierungssystemen ausgetauscht werden, laufen diese Texte Gefahr, verstümmelt oder verfälscht zu werden.

Ein Beispiel: Auf einem Rechner mit der in Deutschland bei Windows üblichen Codepage CP1252 (Windows Western) wird ein »æ« eingegeben. Gemäß der Adresse in der Codepage speichert der Rechner ein Byte mit dem logischen Zustand hexadezimal E6 bzw. binär 11100110 ab. Wird die Datei auf einem slowakischen Rechner mit der zentraleuropäischen Windows-Codepage CP1250 geöffnet, liest dieser zwar korrekt den Binärcode 11100110, findet auf der dazugehörigen Speicheradresse E6 aber nicht das »æ«, sondern ein »´c«, welches folgerichtig am Bildschirm angezeigt wird.[2]

Die wichtigsten Codepages sind in der Norm ISO 8859 definiert. ISO 8859 bietet jeweils für bestimmte Sprachgruppen einen gemeinsamen Zeichensatz an. Beispielsweise deckt ISO 8859-1 (Latin 1) die meisten westeuropäischen Sprachen ab, ISO 8859-2 die meisten osteuropäischen Sprachen und ISO 8859-7 das (Neu-)Griechische. Leider verwenden aber viele verbreitete Betriebssysteme nicht den ISO-Standard, sondern jeweils ganz eigene Codepages, so dass die Verwirrung babylonisch ist.

Wie kann nun das Problem der Inkompatibilität gelöst oder umgangen werden?


     

  1.  Neben der internationalen Referenz-Version des ASCII-Zeichensatzes gibt es mehrere Dutzend nationale Varianten, in denen viele Code-Positionen nach den jeweiligen nationalen Bedürfnissen belegt sind. So stehen in der deutschen Referenzversion an den Stellen, an denen in der internationalen Version die eckigen und geschweiften Klammern, der backslash und der senkrechte Strich stehen, die Umlaute, statt der Tilde das »ß«, statt »@« das »§«-Zeichen. Seit sich 8-Bit-Codes durchgesetzt haben, sind die nationalen Varianten des 7-Bit-ASCII-Codes in der Praxis kaum mehr von Bedeutung.
  2.  Das gilt nur für Windows-Versionen oder Windows-Programme, die nicht Unicode-fähig sind (zu Unicode und Windows siehe weiter unten in diesem Beitrag).
  3.