Webkrauts Logo

Webkrauts Webkrauts Schriftzug

- für mehr Qualität im Web

Zeichensätze und Zeichenkodierungen

Wir haben noch nicht alle älteren Artikel nachbearbeitet. Das bezieht sich in der Regel nur auf die Codebeispiele, die noch nicht optimal dargestellt werden.

Zeichensätze und Zeichenkodierungen

Damit Ihre Website Umlaute und Sonderzeichen richtig anzeigt, ist es notwendig, die passende Zeichenkodierung festzulegen. Markus Wulftage erklärt, was es mit ISO 8859-1 und UTF-8 auf sich hat.

Sie kennen das sicher: Sie besuchen eine beliebige Webseite und der Inhalt ist stellenweise mit kleinen Kästchen, Fragezeichen oder anderen kryptischen Zeichenkombinationen gespickt, wo eigentlich Umlaute oder Sonderzeichen stehen sollten. Das ist kein schöner Anblick und der Text lässt sich auch nur holprig lesen – falls der Leser diese Anstrengung überhaupt auf sich nimmt.

Beispiel eines fehlinterpretierten Textes

Das Problem bei solch einer Webseite ist eigentlich recht simpel, denn die benutzte Zeichenkodierung wurde gar nicht oder im falschen Kontext angegeben. Und genau wie Ihnen die Information über diese durch Kästchen, Fragezeichen oder kryptische Zeichenkombinationen ersetzen Zeichen fehlt, weiß der Browser ohne die korrekte Zeichenkodierung auch nicht, wie er die Daten zu verarbeiten hat. Denn je nach Einstellung fällt der Browser auf eine bestimmte Standardzeichenkodierung zurück. Stimmt diese nicht zufällig mit der tatsächlich verwendeten überein, kann es zu Fehlinterpretationen kommen. Und genau das verursacht den Buchstabensalat.

Falls Sie eine Website Ihr Eigen nennen: Kennen Sie dessen Zeichenkodierung? Wenn Sie sich nicht sicher sind oder die Frage mit Nein beantworten müssen oder wenn Sie den Unterschied zwischen Zeichenvorrat, Zeichensatz und Zeichenkodierung nicht kennen, dann ist dieser Artikel genau richtig für Sie.

Die Begriffe Zeichenvorrat, Zeichensatz und Zeichenkodierung

Um nun das Problem der falschen Darstellung des Textes erläutern zu können, sind ein paar Begriffserklärungen notwendig:

  • Der Begriff Zeichenvorrat (engl. character repertoire) beschreibt die Menge der Zeichen, die man zur Verfügung hat oder verwenden möchte.
  • Ordnet man den Zeichenvorrat, bringt man die Zeichen also in eine bestimmte Reihenfolge und nummeriert sie durch, bekommt man einen Zeichensatz (engl. character set, kurz charset).
  • Schließlich muss der Computer mit den Zeichen noch arbeiten können, also das Muster in Bits kennen. Dafür ist die Zeichenkodierung (engl. character encoding) zuständig. Da im Zeichensatz bereits eine Reihenfolge und Nummerierung festgelegt wurde, braucht dieser also nur noch die Bitmuster zuzuordnen werden.

Die wichtigsten Zeichensätze und -kodierungen

Der in Westeuropa am meisten genutzte Zeichensatz ist ISO 8859-1 (auch „Latin 1“ genannt), der genau wie die anderen Zeichensätze der ISO-8859-Familie auf einer einfachen 8-Bit-Kodierung basiert und somit 28 Zeichen abbilden kann. Der ISO-8895-1-Zeichensatz ist vor allem deshalb so beliebt, da er neben den grundlegenden ASCII-Zeichen auch die fürs Deutsche wichtige Umlaute umfasst; also ä, ö, ü, Ä, Ö, Ü und ß. Somit kommen Sie für deutsche Texte mit diesem Zeichensatz eigentlich aus. Möchten Sie gleichzeitig Zeichen einer anderen Sprache oder eines anderen Zeichensystems nutzen, reicht dieser Zeichensatz nicht mehr aus.

Also wurde Unicode erfunden, der mit derzeit 220+216 möglichen Zeichen langfristig jedes sinntragende Zeichen beziehungsweise Textelement aller bekannten Schriftkulturen und Zeichensysteme umfassen soll. Die gebräuchlichste Kodierung für Unicode-Daten ist UTF-8, bei der ein geschickter Trick angewandt wird: denn reicht ein Byte zur Abbildung des Zeichens nicht aus, wird einfach ein zweites Byte dazu genommen; reicht auch das nicht aus, wird ein weiteres Byte dazu genommen und so weiter.

Das Problem

Nun gibt es neben den hier bereits genannten Zeichensätzen und Zeichenkodierungen noch viele andere. Und damit der Browser die kodierten Daten richtig verarbeiten kann, muss er wissen, mit welcher dieser vielen unterschiedlichen Zeichenkodierungen die Daten kodiert sind. Fehlt eine solche Angabe, kann es zu Fehlinterpretationen kommen.

Die Ursache dafür ist, dass einerseits einige Zeichenkodierungen nur eine begrenzte Anzahl von Zeichen kodieren können (so etwa bei ASCII und ISO 8859-1) und andere hingegen beliebig viele (UTF-8). Darüber hinaus kodieren zwei unterschiedliche Zeichenkodierungen aufgrund unterschiedlicher Zeichensätze dasselbe Zeichen auch mit unterschiedlichen Bit-Sequenzen, sodass auch dieselben Bit-Sequenzen von unterschiedlichen Zeichenkodierungen auf unterschiedliche Zeichen abgebildet werden.

Hier ein einfaches Beispiel um dies zu verdeutlichen:

Beispiel der unterschiedlichen Kodierungen anhand einiger Zeichen

Betrachten wir allein die Buchstaben „A“, „ü“ und „π“. Das „A“ ist in allen Zeichensätzen vertreten und wird aufgrund der Kompatibilität von ISO 8859-1 und UTF-8 zu ASCII auch durch dieselbe Bit-Sequenz kodiert. Dort gibt es keine Probleme. Das „ü“ ist nun im ASCII-Zeichensatz nicht mehr enthalten und kann somit auch nicht kodiert werden. Hier ist auch schon zu sehen, dass obwohl das Zeichen in den Zeichensätzen ISO 8859-1 und Unicode an derselben Position steht, es doch unterschiedlich kodiert wird. Das letzte Zeichen, das „π“, ist hingegen nur noch im Unicode-Zeichensatz enthalten und kann daher auch nur durch UTF-8 kodiert werden.

Also ist es wichtig, die verwendete Zeichenkodierung immer anzugeben. Im HTTP ist dafür das Header-Feld „Content-Type“ vorgesehen, das neben dem Inhaltstyp (etwa „text/html“ für ein HTML-Dokument) auch einen Parameter für die Zeichenkodierung (verwirrenderweise als „charset“ bezeichnet) besitzt.

Zeichenkodierungen im Einsatz bei HTML-Dokumenten

Häufig wird die Angabe der Zeichenkodierunge bei HTML-Dokumenten nur im Dokument selbst in einem „HTTP-äquivalenten“ meta-Element notiert. Doch dort ist die Information völlig deplatziert. Denn der Browser muss, noch bevor er sich das erste Bit des Dokuments anschaut, wissen, wie dieses kodiert ist. Steht die Information erst irgendwo im Dokument mit einer noch unbekannten Kodierung, fällt er auf die Standardkodierung zurück und versucht das Dokument damit zu dekodieren. Dass dies klappt, ist dann wieder nur Zufall.

Viele scheinen zudem noch gelernt zu haben, dass bei HTML nur die ASCII-Zeichen erlaubt sind und alle anderen Zeichen durch Zeichenreferenzen dargestellt werden müssen. Diese Aussage ist allerdings nur dann richtig, wenn auch ASCII als Zeichenkodierung benutzt wird. Wird jedoch ISO 8859-1 oder UTF-8 als Zeichensatz benutzt (und dies auch korrekt angegeben), können selbstverständlich auch alle in ISO 8859-1 beziehungsweise Unicode enthaltenen Zeichen benutzen werden. Das gilt natürlich auch für alle anderen Zeichenkodierungen.

Fazit

Welche Zeichenkodierung Sie nun verwenden, ist prinzipiell egal und hängt vor allem von dem benötigten Zeichenvorrat ab. Sind es beispielsweise nur Zeichen, die im ISO-8859-1-Zeichenvorrat enthalten sind, reicht ISO 8859-1 natürlich aus. Doch geht es über die Zeichen von ISO 8859-1 hinaus, sollten Sie UTF-8 verwenden, da andere Zeichen außerhalb des ISO-8859-1-Zeichenvorrats gar nicht mehr oder wie bei HTML nur noch durch Zeichenreferenzen erreichbar sind. Zeichenreferenzen benötigen dann aber auch wieder mehr Speicherplatz als die Zeichen selbst.

Wenn Sie Unicode mit UTF-8-Kodierung verwenden möchten, sollten Sie sichergehen, dass Sie einen Unicode-fähigen Editor verwenden. Beim Speichern achten Sie darauf, die Daten ohne BOM zu speichern. Denn die BOM kann bei einigen Browsern und auch bei serverseitigen Skriptdateien zu Problemen führen.

Egal welche Zeichenkodierung Sie nun verwenden, wichtig ist: geben Sie diese immer im HTTP-Header zusammen mit dem Inhaltstypen explizit an.

Weiterführende Verweise

Kommentare

Erik
am 06.12.2006 - 01:07

Da bin ich platt... Super Artikel! Hört man mich applaudieren? :) Noch mehr zum Thema bitte. "accept-charset" in Formularen, die Zeichensätze von Feeds, das & in Feeds, PCDATA u. CDATA, etc. etc. der Artikel ist schon reichlich lang... vielleicht darf man aber trotzdem schon eine Zugabe anfordern? :) (PS: ich klatsche immer noch) ;)

Permanenter Link

Elmar
am 06.12.2006 - 08:54

Guter Artikel. Was ist mit dem Advendskalender 2005? Im Firefox 2 erscheinen die Umlaute wie in der Abbildung (Fragezeichen). UTF-8, wie im Header definiert, wird vom Browser ausgewählt. Umstellungen auf ISO 8859-1 u. andere lassen die Umlaute nicht erscheinen.

Permanenter Link

Eric Eggert
am 06.12.2006 - 08:59

Hallo Elmar, das Problem ist bekannt, wir haben uns aber erstmal auf den aktuellen Kalender konzentriert. Es tritt auch nur bei den Vorschautexten auf. Wir werden uns darum kümmern.

Permanenter Link

Funbug
am 06.12.2006 - 09:07

Schöner Eintrag.

Sehr häufig gibt es solche Kodierungsprobleme bei Trackbacks in Blogs. Sendet ein ISO-Blog einen Trackback an ein UTF-Blog oder andersrum, sind die meisten Blog-Scripte leider nicht in der Lage dies zu erkennen und korrekt umzuwandeln.

Um ein wenig tiefer in das Thema Charsets einzusteigen empfiehlt sich der Artikel "The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets" von Joel Spolsky.

Permanenter Link

makcie
am 06.12.2006 - 09:11

Danke für diesen Artikel.
Nun weiß ich endlich, warum manche E-Mails kaum zu lsen sind!
Frage:
Welche Editoren sind Unicode-fähig?

Permanenter Link

Uwe
am 06.12.2006 - 15:13

Schöner Artikel -- aber ...
... wie mache ich dem Webserver klar, daß er für meine Dateien eine bestimmte Zeichenkodierung an den Browser melden soll, wenn ich statische Seiten habe, also nicht selbst z.B. mit einem CMS für die Auslieferung der Seiten sorge?
Beim Hoster habe ich normalerweise keinen Zugriff auf die Konfiguration des Webservers und auch das Konfigurieren mittels .htaccess (wie hier beschrieben) ist nicht immer erlaubt.
Wenn der Server kein Default Encoding eingerichtet hat (und damit im Header auch keins übertragen wird), wird wenigstens das Encoding, welches in der HTML-Datei selbst angegeben ist, vom Browser (meistens) beachtet -- aber eben nicht immer.
Was also tun?

Permanenter Link

Elmar
am 06.12.2006 - 16:13

@makcie Praktisch jeder moderne Editor sollte UTF-8 kodieren können. Das sollte im Menü "Ansicht", "Extras" o.ä. stehen und evtl. in der Hilfedatei. Unter welchem Betriebssystem arbeitest du? Für Windows gibt es kostenlos z.B. Notepad++, unter Linux und KDE z.B. Kate. Die haben auch Syntax-Highlighting für verschiedene Sprachen, u.a. XML und (X)HTML.

@Uwe Wieviel Geld pro Monat würdest du ausgeben? Für wenige Euro sollte ein Provider mit dem Apache-Webserver zu finden sein, bei dem sich die .htaccess editieren lässt. Ohne diese Möglichkeit und ohne CGI-Skripting würde ich keinen wählen (außer weniger als 5€ im Monat spielten eine Rolle - manche verrauchen das und mehr am Tag).

Permanenter Link

makcie
am 08.12.2006 - 09:11

Danke Elmar für die Antwort.
Ich arbeite mit Windows XP Professional.
Mein Lieblingseditor ist immer noch Phase 5 von Ulli Meybohm, aber der kann leider nicht UTF-8 kodieren.
Notepad++ sieht gut aus, probiere ich aus. Gefunden habe ich jetzt noch PSPad siehe www.pspad.com,

Permanenter Link

inta
am 29.03.2007 - 12:53

Für diejenigen unter euch die einen schnellen und leistungsfähigen Editor suchen empfehle ich SciTE. Die Seite und auch der Editor hinterlassen erstmal einen etwas spartanischen Eindruck, aber nachdem ich die Einstellungen nach meinen Wünschen vorgenommen hatte wollte ich nie wieder einen anderen ;)

Permanenter Link

Franz
am 25.05.2007 - 22:09

Als UTF-8-fähige Editoren empfehle ich BabelPad, EditPad und SuperEdi. Ich finde sie besonders klar und bedienungsfreundlich. Ebenfalls gut brauchbar sind Notepad++ und PSPad, die die schon genannt wurden.

Permanenter Link

Die Kommentare sind geschlossen.