XHTML Entities vs. Zeichensatz

Wer kennt das nicht, valides XHTML als auch XML verlangen die Angabe eines Zeichensatzes. Wir haben diese Angaben auf unseren Homepages auch immer fleißig gemacht. Seit kurzem haben wir begriffen, was so ein Zeichensatz alles beeinflusst. Ums vorweg zu nehmen, der korrekte Zeichensatz erspart es Umlaute durch Entities (z.B. ä) zu ersetzen (escapen),… ok, wie das? Bei falschem Zeichensatz könnte in etwa folgendes Problem auftreten, statt deutschen Umlauten sieht man nur Fragezeichen, Quadrate oder sonsitge komische Zeichen, wie in diesem Bild:

Beispiel Text mit Fragezeichen statt Umlauten

statt dem richtigen Text:

Beispiel mit korrektem Zeichensatz mit Umlauten

Zunächst einmal kurz die Grundlage, was ist ein Zeichensatz? Dazu muss man sich klar machen, auf einem Computer wird letztendlich alles auf eine Festplatte geschrieben. Das ist eine Magnetscheibe und bekanntlich kann so ein Magnet in 2 Richtungen ausgerichtet sein (+/-). Desswegen speichert so ein Computer alles im Binärsystem, also mit 0 (-) und 1(+). Mit einem Bit kann man grade mal zwei Zeichen codieren, eben 0 und 1. Mit zwei Bit bekommt man schon 4 Symbole codiert: 00, 01, 10, 11. Mit 7 Bit schafft mans schon auf 128 Zeichen. Bei 28 Buchstaben, jeweils groß und klein, den Zahlen und Satzzeichen kommt man mit einem solchen Zeichensatz (z.B. ASCII) schon sehr weit. Dort steht die Bitfolge 1000011 für ein C.

Eine Datei muss unbedingt auch in dem Zeichensatz gespeichert sein, in welchem sie später interpretiert wird

Ein anderer Zeichensatz wäre UTF-8, bestehend aus bis zu 32 Bit. Auch hier ist ein C durch 1000011 repräsentiert. Das ä aber zum Beipsiel durch 1100001110100100, in ASCII hingegen gibt es gar kein ä. Ein anderer Zeichensatz, ISO-8895-1 interpretiert die Folge 11111100 als ein ä.

Gebe ich also im XHTML Header an, die Datei soll als ASCII interpretiert werden passiert nichts anderes, als dass der Browser sich den Bitstrom der Datei anschaut, in 7 Bit Schritte einteilt und ein entsprechendes Zeichen zuordnet. Es dürfte klar sein, dass so natürlich teilweise andere Zeichen bei rauskommen, wenn man nun ein anderen Zeichensatz angibt.
Das übrhaupt noch was zu lesen ist liegt daran, dass sich die Zeichensätze alle im Bereich eder normalen Buchstaben sehr ähneln und sich an ASCII orientieren.

Welches ist nun aber der richtige Zeichensatz für XHTML oder XML für deutsche Texte? Nun wie schon gesagt, mit ASCII kommt man von daher nicht weit, da deutsche Umlaute fehlen. Natürlich kann man sie durch Entities darstellen, ein ä also durch das HTML Entity ä
Das ist aber total nervig, da man Texte so nicht flüssig tippen kann und ständig betroffenen Buchstaben ersetzen muss. Vor allem eine Gästebuchfunktion muss sich durch Ersetzungsoperationen um solche Dinge kümmern. Ausserdem sind Texte mit Entities total schwer zu lesen und auf Rechtschreibung zu korrigieren.

Wählt man ISO-8895-1 oder UTF8 als Zeichensatz, hat man das Problem nicht. Aber jetzt kommt der entscheidende Punkt:
Eine Datei muss unbedingt auch in dem Zeichensatz gespeichert sein, in welchem sie später interpretiert wird!
Das heisst, schreibe ich in meinen XHTML Header UTF-8 und speichere aber einfach, wie immer ohne nachzudenken meinen Quellcode im Editor meiner Wahl ab, wird man wider nicht die richtigen Zeichen sehen! Man muss in jedem Editor schauen, wo man den Zeichensatz einstellen kann. Sogar der Windows Editor Notepad kann das.
Eclipse z.B. speichert alles standardmäßig im Microsoft Windows Zeichensatz cp1252. Das muss man erstmal auf UTF-8 umstellen, vorher geht gar nichts.
Das Selbe gilt für eine Datenbank. Dort müssen die Tabellen ebenfalls im richtigen Zeichensatz codiert sein!
Stimmen dann das Format wie man abspeichert und wie man interpretiert überein, kann man alle möglichen Zeichen die im Zeichensatz enthalten sind in XHTML nutzen ohne Entities. Ohne nerviges ä
Einzige Voraussetzung, die Besucher der Seite können den eingestellten Zeichensatz auf ihrem Rechner auflösen. Das ist bei UTF-8 und ISO-8895-1 heutzutage auf jeden Fall gegeben.

Ist das nun das Ende der Entities? Nein, Entities wie &lt; für < und &gt; für > wird man in XML oder XHTML immer brauchen, da die Zeichen <,>,&,und ” Teil der Sprache sind und als Zeichen dann in Entities anzugeben.

Zusammenfassend lässt sich sagen, durch das Abspeichern der Dateien und Datenbanktabellen im richtigen Zeichensatz (UTF-8, ISO-8895-1) und die Angabe dessen im Header, braucht man keine Entities und trotzdem werden alle Zeichen, Umlaute und Symbole korrekt angezeigt.

Angeben tut mans übrigens so ;-)

  <?xml version="1.0" encoding="UTF-8"?>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Weiterführende Links:
Zeichenkodierung – Einführung in XHTML, CSS und Webdesign
W3C I18N Tutorial: Character sets & encodings in XHTML, HTML and CSS
Imperia Unicode- und Multi-Language-HOWTO
UTF-8-Codetabelle mit Unicode-Zeichen

Wenn dir dieser Beitrag gefällt, lade den Autor doch mal zu einem Drink ein ;-)

Broadcast us
  • Yigg
  • Webnews.de
  • Digg
  • MisterWong
  • del.icio.us
  • Technorati
  • DZone
  • Facebook
  • Google Bookmarks
  • Reddit
  • StumbleUpon
  • TwitThis

Tags: , , , , , , ,

5 Responses

  1. IMHO (a.k.a. jetzt wird’s subjektiv) sollte man Websites ausschliesslich in UTF-8 speichern, weil man dann die Sicherheit hat, auch mal ein etwas “exotischeres” Zeichen oder auch Wörter in einer anderen Sprache mit an Sicherheit grenzender Wahrscheinlichkeit (es sind beispielsweise nicht alle japanischen / chinesischen Zeichen in UTF-8 aber fast alles was man braucht) richtig darstellen kann. In diesem Zusammenhang sollte man niemals nie sagen, und der Aufwand UTF-8 einzusetzen ist der gleiche wie die Benutzung von anderen Codierungen.

    IMHO, of course,
    Erik

  2. [...] nächstes kommt der Zeichensatz, als Webdesigner ist das sehr wichtig, wir stellen ihn auf UTF-8 unter “Window” -> “Preferences” -> [...]

  3. [...] Versionen Parallel installiert die Internet Explorer Webdesign Toolbar und die Feststellung, dass dank UTF-8 auf Entities verzichtet werden kann Schließlich noch die beiden ebenfalls sehr ausführlichen Beiträge über Einheitliches CSS Design [...]

  4. [...] Den nächsten Reiter, der ebenfalls Environment heißt kann man wieder auslassen. Unter dem letzten Reiter Common setze ich nun noch unter Display in favorites menu einen Haken bei Debug und stelle das Consolen Encoding auf UTF-8 (warum siehe XHTML Entities vs. Zeichensatz) [...]

  5. Der Zeichensatz in dem die Datei gespeichert ist, ist die eine Sache bei reinen Textdateien.

    Nur am Rande:
    Einige Dateiformate bestehen nicht nur aus den reinen Daten, sondern auch aus Meta-Informationen über Strukturierung und Zeichensatz (Codierung). Hier ist festgelegt wie jede Teilinformation codiert ist.

    Zurück zum Thema:
    Bei reinen Textdateien (HTML/XML) kann man im Text natürlich auch diese Meta-Information mit angeben. Anwendungen (Browser) lesen diese Textdateien zunächst als ASCII ein, prüfen ob diese Meta-Information vorhanden ist und werten die Datei gemäß dem angegebenen Zeichensatz aus (wenn dieser Zeichensatz von der Anwendung unterstützt wird). Dann weiß die Anwendung welche Binärfolge welchem Eintrag in der Zeichensatz-Tabelle entspricht. Von all diesem sieht der Benutzer noch nichts. Jetzt muss noch die grafische Entsprechung in einer Schrift-Datei (Schriftart) gefunden werden. Wie ein das entsprechende Zeichen aussieht liegt also an der Schriftart.

    Leider hat nicht jede Schriftart für jedes Zeichen eine grafische Entsprechnung. UTF-8 ist also nur ein Schritt zur richtigen Darstellung von Schriften. Und schon gar nicht gibt es diese als vollständige Schriftfamile in allen beliebten Auszeichnungsvarianten (bold, italic, underline, …, oder sogar eine Handschrift-Schriftart).

Leave a Reply