Accesskey n springt zur Seitennavigation. Springe zum Inhalt.

Dieses Dokument ist eine Übersetzung. Im Falle von Abweichungen oder Fehlern sollte das aktuelle englische Original als maßgeblich angenommen werden. Das W3C besitzt das Copyright am Original, wie unten beschrieben.

Übersetzer: Gunnar Bittersmann

s_gotoW3cHome Internationalisierung
 

Zeichencodierung für Anfänger

Zielgruppe: Autoren, Nutzer und alle, die sich nicht sicher sind, was eine Zeichencodierung ist, und sich eine kurze Zusammenfassung wünschen, was das für sie bedeutet

Frage

Was ist eine Zeichencodierung und warum sollte ich mich damit beschäftigen?

Antwort

Zunächst: Warum sollte ich mich damit beschäftigen?

Wenn man irgendwelche anderen Zeichen verwendet als die elementaren im Englischen gebräuchlichen, dann kann es sein, dass andere den Text nicht lesen können, wenn nicht angegeben wurde, welche Zeichencodierung verwendet wurde.

Wenn der Text bspw. so aussehen sollte:

mojibake1.gif

dann kann es sein, dass er so dargestellt wird:

mojibake2.gif

Ist die Zeichencodierung nicht richtig angegeben, leidet nicht nur die Lesbarkeit des Textes; es kann auch bedeuten, dass die Inhalte bei einer Suche nicht gefunden oder anderweitig nicht richtig weiterverarbeitet werden können.

Was also ist eine Zeichencodierung?

Wörter und Sätze eines Textes werden aus Zeichen gebildet. Beispiele für Zeichen sind der lateinische Buchstabe á oder das chinesische Schriftzeichen oder das Devanagari-Zeichen .

Evtl. sind einige Zeichen auf dieser Seite nicht zu sehen, weil die benötigten Schriftarten nicht installiert sind. Click auf die Stelle, an der ein Zeichen zu sehen sein sollte, dort sind Grafiken verlinkt. Diese Seite ist in UTF-8 codiert.

Zeichen werden zusammengefasst in einem Zeichensatz (auch Zeichenvorrat oder Repertoire genannt, engl. character set). Dieser wird als codierter Zeichensatz (engl. coded character set) bezeichnet, wenn jedem Zeichen eine Nummer zugeordnet wird: der Zeichencode (engl. codepoint). Diese Zeichencodes werden im Computer durch ein oder mehrere Bytes repräsentiert.

Das heißt: Alle Zeichen werden im Computer mittels eines Codes gespeichert, wie Chiffren in der Spionage. Eine Zeichencodierung (engl. character encoding) ist ein Schlüssel, um diesem Code zu knacken. Sie stellt die Zuordnungen zwischen den Bytes, die im Computer für Zahlen stehen, und den Zeichen im Zeichensatz her. Ohne den Schlüssel sehen die Daten nur wie Müll aus.

Der missverständliche Begriff charset (Zeichensatz) wird oft auch fälschlicherweise für Zeichencodierungen verwendet. Man sollte sich dessen bewusst sein, selbst aber möglichst immer den Begriff Zeichencodierung dafür verwenden.

Unglücklicherweise gibt es viele verschiedene Zeichensätze und Zeichencodierungen, d.h. viele verschiedene Zuordnungen zwischen den Bytes, den Zeichencodes und den Zeichen. Für Interessierte geht der folgende Kasten ins Detail.

Im codierten Zeichensatz ISO 8859-1 (Latin1) ist der Zeichencode des Buchstaben é bspw. 233 (dezimal). In ISO 8859-5 aber repräsentiert derselbe Zeichencode den kyrillischen Buchstaben щ. Diese Zeichensätze enthalten weniger als 256 Zeichen und ordnen die Zeichencodes direkt den Bytewerten zu. Der Zeichencode 233 wird repräsentiert von einem Byte mit dem Wert 233. Beachte, dass dieses Byte für é oder щ stehen kann, je nach Kontext.

Es gibt dennoch Möglichkeiten, Zeichen aus verschiedenen Schriften in den Griff zu bekommen. Im Unicode-Zeichensatz bspw. sind beide Zeichen in einunddemselben Zeichensatz vereint. Unicode enthält in einem einzigen Zeichensatz die allermeisten Zeichen, die man je benötigen wird. Während der Wert 233 immer noch für das é steht, hat das kyrillische Zeichen щ nun den Wert 1097. Diese Nummer ist jedoch zu groß, als dass sie mit nur einem Byte dargestellt werden kann.* Wenn man die Unicode-Zeichencodierung UTF-8 verwendet, wird das щ durch zwei Bytes repräsentiert, aber der Zeichencode ist nicht einfach der Wert der beiden Bytes aneinandergereiht – eine etwas kompliziertere Codierung ist vonnöten. Anderen Unicode-Zeichen entsprechen ein, zwei, drei oder vier Bytes in der UTF-8-Codierung.

UTF-8 ist die am weitesten gebräuchliche Möglichkeit, Unicode-Text auf Webseiten zu repräsentieren. Aber UTF-8 ist nur eine Möglichkeit, Unicode-Zeichen zu codieren. Anders gesagt: Einem bestimmten Zeichencode im Unicode-Zeichensatz können verschiedene Byte-Sequenzen entsprechen, abhängig davon, welche Codierung für das Dokument verwendet wurde. Um Unicode-Zeichencodes durch Bytes zu repräsentieren, kann jede der Codierungen UTF-8, UTF-16 oder UTF-32 verwendet werden. Das Devanagari-Zeichen mit dem Zeichencode 2325 (hexadezimal 915) wird bei Verwendung von UTF-16 durch zwei Bytes repräsentiert (09 15), bei UTF-8 durch drei Bytes (E0 A4 95) und bei UTF-32 durch vier Bytes (00 00 09 15).

* Heutzutage bestehen die meisten Bytes aus 8 Bits. Es gibt nur 28 (also 256) Kombinationen von 8 Bits.

Zeichencodes werden üblicherweise hexadezimal angegeben. 233 bspw. ist in hexadezimaler Darstellung E9. Unicode-Zeichencodes werden in der Form U+00E9 angegeben.

Andere Dinge (wie Byte-Reihenfolge und Escape-Sequenzen) machen die Sache noch etwas komplizierter als im obigen Kasten beschrieben, aber die oben genannten Details zeigen schon, warum es wichtig ist, dass ein Anwendungsprogramm weiß, welche Zeichencodierung die passende für die Daten ist und wie diese Codierung zu entschlüsseln ist.

Meistens muss man nicht alles genau bis ins letzte Detail wissen. Es genügt, die Ratschläge im Abschnitt Was bedeutet das für mich? weiter unten zu beachten.

Was spielen Schriftarten für eine Rolle?

Eine Schriftart (engl. font) enthält die Glyphen-Definitionen, d.h. die Definitionen der Gestalt der Zeichen.

Hat das Anwendungsprogramm erst einmal herausgefunden, mit welchen Zeichen es zu tun hat, sucht es in der Schriftart nach Glyphen, um diese Zeichen darzustellen oder auszudrucken. (Wenn die Zeichencodierung falsch angeben ist, wird natürlich nach Glyphen für die falschen Zeichen gesucht.)

Eine bestimmte Schriftart deckt üblicherweise einen Zeichensatz ab, oder bei größeren Zeichensätzen wie Unicode nur einen Teil aller Zeichen in diesem Zeichensatz. Wenn eine Schriftart keine Glyphe für ein bestimmtes Zeichen bereitstellt, suchen manche Anwendungsprogramme nach dem fehlenden Zeichen in anderen auf dem System installierten Schriftarten (was zur Folge hat, dass die Glyphe anders aussieht als der Text drumherum, wie in einem Erpresserbrief). Ansonsten wird stattdessen ein Rechteck, ein Fragezeichen oder irgendein anderes Zeichen angezeigt. Bspw.:

mojibake3.gif

Was bedeutet das für mich?

Als Autor oder Entwickler muss man die beste Zeichencodierung für seinen Inhalt oder seine Daten wählen. Unicode-Codierungen sind dabei oft eine gute Wahl, denn man kann einunddieselbe Codierung für so ziemlich alle Zeichen verwenden, die man je antreffen wird. Dies vereinfacht die Sache enorm. Die Verwendung von Unicode durch das ganze System hinweg macht die Beachtung wechselnder Zeichencodierungen und Umwandlungen von einer in eine andere unnötig.

Autoren müssen überprüfen, in welcher Codierung Editoren oder Scripte Text speichern, und wie man Text in der Codierung seiner Wahl speichert. Es ist jedoch zu beachten, dass einfach nur eine andere Zeichencodierung anzugeben die Bytes nicht ändert; man muss den Text auch in dieser Codierung speichern.

Autoren müssen auch wissen, wie man die Zeichencodierung angibt, die für das jeweilige Dokument-Format verwendet wird. Es ist auch zu prüfen, ob der Server die Dokumente mit den richtigen HTTP-Angaben ausliefert.

Entwickler müssen sicherstellen, dass verschiedene Teile eines Systems miteinander kommunizieren können; dass diese verstehen, welche Zeichencodierungen verwendet werden, und die nötigen Codierungen und Zeichen unterstützen.

Die Links weiter unten geben weitere Informationen zu diesen Themen.

Übrigens

Der Artikel Zeichencodierungen: grundlegende Konzepte gibt eine lesenswerte Einführung in verwandte Themen wie Unicode, UTF-8, Zeichensätze, codierte Zeichensätze, Zeichencodierungen, den Dokument-Zeichensatz, Zeichen-Escapes und den HTTP-Header.

Anmerkung des Übersetzers: Ein lesenswerter Artikel in deutscher Sprache ist Zeichenkodierung in Michael Jendryschiks Einführung in XHTML, CSS und Webdesign. http://jendryschik.de/wsdev/einfuehrung/grundlagen/zeichenkodierung

Sagen Sie uns, was Sie denken (auf Englisch).

Abonnieren Sie unseren RSS-Feed.

Neue Ressourcen

News auf der Startseite

Twitter (News auf der Startseite)

‎@webi18n

Literaturhinweise

Autor: Richard Ishida, W3C. Übersetzer: Gunnar Bittersmann.

Valides XHTML 1.0!
Valides CSS!
Kodiert in UTF-8!

Übersetzung der englischen Version vom 2010-09-08. Letzte Änderung der übersetzten Version am 2011-01-26 UTC.

Suchen Sie nach qa-what-is-encoding im i18n-Blog, um alle Dokumentänderungen nachzuvollziehen.