Zeichenkodierung/Webdokumente

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

Erkennung der Codierung von Webdokumenten[Bearbeiten]

Wenn ein Browser ein Webdokument anfordert, „sieht“ er im Prinzip nur eine Folge von Bytes, aus denen er entnehmen muss, für welche Zeichen sie stehen. Er hat dazu mehrere Möglichkeiten, die verwendete Codierung eines Webdokuments zu erkennen.

Der ideale Fall ist, wenn sie ihm explizit mitgeteilt wird. Natürlich muss die Angabe einer Codierung auch mit der tatsächlich verwendeten Codierung übereinstimmen. Für Webdokumente auf Webservern, auf die per HTTP zugegriffen wird, ist vorrangig vor allen sonstigen Angaben die Auszeichnung im HTTP-Header Content-Type maßgeblich. Das sieht für HTML-Dokumente so aus:

Content-Type: text/html; charset=utf-8

Diese Zeile ist allerdings für den uneingeweihten Browsernutzer unsichtbar, da sie Bestandteil der HTTP-Kommunikation ist und von Browsern in der Regel nicht angezeigt wird. (Zum Sichtbarmachen siehe Zeichenkodierung/Webserver#Tools)

HTML-Dokumente[Bearbeiten]

Wenn der Browser per HTTP keine Angabe zum charset empfängt, kann hilfsweise ein HTML-Meta-Element verwendet werden, um dieselbe Angabe via HTML nachzureichen:

<meta charset="utf-8">

Die Meta-Angabe wird ebenfalls genutzt, wenn die HTML-Datei nicht per HTTP empfangen wurde, sondern beispielsweise direkt von der Festplatte gelesen wurde. Es ist also in jedem Fall sinnvoll, die Meta-Angabe unbedingt in die HTML-Datei einzufügen. Mancher Webserver liest vor der Auslieferung die HTML-Datei ein und setzt die HTTP-Header auf die Werte, die er in den Meta-Elementen findet.

Sollte weder im HTTP-Header noch im Meta-Element eine Angabe zur Codierung gefunden werden, sowie in HTML5-Dokumenten keine BOM vorhanden sein, wendet der Browser ein Ratesystem an, mit dem die wahrscheinlichste verwendete Codierung automatisch ermittelt wird. Dieser Vorgang liefert oftmals korrekte Werte, in exotischen Fällen kann er aber auch falsch liegen. Als letzte Möglichkeit kann der Benutzer dann auch manuell eingreifen und über einen Menüpunkt „Zeichencodierung“ (meist im Menü „Ansicht“ zu finden) manuell eine Auswahl treffen, bzw. er muss eher ein wenig herumprobieren, welche der vielen Wahlmöglichkeiten ihm eine korrekte Darstellung liefert.

CSS-Dokumente[Bearbeiten]

Wie üblich hat die Angabe im HTTP-Header Vorrang:

Content-Type: text/css; charset=utf-8

Mit @charset kann allerdings auch im Dokument eine Zeichencodierung angegeben werden.

@charset "UTF-8";

Diese Angabe ist optional. Wenn sie aber vorhanden ist, muss sie als allererstes im Dokument stehen.

JavaScript[Bearbeiten]

JavaScript kennt keine Möglichkeit der Angabe einer Codierung. Hier bleibt nur der Content-Type-HTTP-Header. Bei in HTML-Dokumenten eingebettetem JavaScript-Code gilt die Codierung des HTML-Dokuments.

Verwendung von beliebigen Zeichen[Bearbeiten]

Jede Sprache (Programmiersprachen wie Auszeichnungssprachen) hat mehr oder weniger eigene Regeln zur Notation von Zeichen-Alternativen, wenn sich Zeichen nicht direkt einfügen lassen. Für Programmiersprachen lassen sich diese Regeln in der jeweiligen Dokumentation in den Kapiteln zur Notation von Strings/Stringliteralen finden. Zu beachten sind Verschachtelungen, beispielsweise JavaScript-Code in <script>-Bereichen oder CSS in <style>-Bereichen in HTML-Dokumenten. Hier gelten nicht die nachfolgend genannten Regeln für HTML sondern die von JavaScript beziehungsweise CSS. Ein Attributwert eines HTML-Elements hingegen folgt den HTML-Regeln, auch wenn es sich um ein Eventhandler- oder style-Attribut handelt. Allerdings wird der Inhalt dieser Attributewerte anschließend von den jeweiligen Systemen interpretiert, weswegen auch deren Schreibweise verwendet werden kann. Damit sind an dieser Stelle zwei Schreibweisen möglich. Das W3C empfiehlt die systemeigene statt der HTML-Schreibweise zu verwenden.

HTML[Bearbeiten]

Wenn ein HTML-Dokument nicht in UTF-8 geschrieben werden kann, aber dennoch Zeichen verwendet werden müssen, die sich mit der gewählten Codierung nicht direkt darstellen lassen, gibt es zwei Ausweichmethoden, um die Zeichen trotzdem ins Dokument einzufügen. Da HTML als Zeichenumfang eines Dokuments (Zeichensatz) grundsätzlich den ganzen Unicode-Bereich erlaubt und die Browser daher grundsätzlich fähig sind, alle Unicode-Zeichen auszugeben (sofern die aktivierte Schriftartdatei für das Zeichen eine Malanweisung enthält), sind diese Alternativmethoden lediglich umständlicher in der Behandlung.

Empfehlung: Verwenden Sie, wann immer es geht, die Zeichen direkt und nicht ihre Ersatzschreibweise. Eine Ausnahme sind nicht sichtbare Zeichen (z.B. geschützte Leerzeichen oder bedingte Trennstriche) bzw. schwer unterscheidbare Zeichen (z.B. Binde- und Gedankenstriche sowie Minus-Zeichen), welche Sie zur besseren Erkennbarkeit als Entity oder Numeric Character Reference (NCR) notieren sollten.
Beachten Sie: dass Sie die HTML-eigenen Zeichen <, >, & sowie " und ' in Attributwerten unabhängig von der gewählten Codierung als Entity oder NCR schreiben müssen.

Die erste Methode ist, ein Zeichen als sogenannte Entity einzufügen. Entity (Entität, Einheit, Gebilde) oder genauer Character Entity Reference (Zeichen-Entität-Referenz) ist der Fachbegriff für „benanntes Zeichen“. Anstatt das gewünschte Zeichen direkt einzugeben, schreibt man als Alternative den Zeichennamen, umrahmt von der Entity-Markierung & und ;. Beispiele: Das große Ä (A-Umlaut) wird als Entity &Auml; geschrieben, das kleine ä als &auml; und das Eurozeichen ist &euro;. Die Groß-/Kleinschreibung ist dabei von Bedeutung.

Die zweite Methode ist, ein Zeichen als numerische Zeichenreferenz zu notieren. Hierbei wird der Unicode-Codepoint in dezimaler oder hexadezimaler Schreibweise verwendet. NCRs werden mit &# eingeleitet, gefolgt von x, wenn der Codepoint als Hexadezimalzahl folgt und mit ; abgeschlossen.

Hexadezimal: &#x20AC;
Dezimal:     &#8364;

Die hexadezimale Notation bietet für Menschen den Vorteil, dass ein Zeichen in den Codetabellen besser gefunden werden kann, denn die Organisation der Zeichen in Unicode-Blöcken orientiert sich an den Hex-Werten.

Eine Vielzahl benannter Zeichen und ihrer NCRs sind in der HTML-Zeichenreferenz aufgeführt.

Javascript[Bearbeiten]

Zeichen, die in der Codierung eines Dokuments nicht direkt verwendbar sind, können über die Escape-Sequenz \uxxxx eingefügt werden. Statt der xxxx ist vierstellig, gegebenenfalls mit führenden Nullen der Unicode-Codepoint in hexadezimaler Schreibweise anzugeben.

\u20AC

CSS[Bearbeiten]

CSS kennt drei Arten der Escape-Schreibweise.

\xxx...

Statt der xxx steht der Unicode-Codepoint in hexadezimaler Schreibweise. Führende Nullen sind nicht notwendig. Folgt anschließend ein anderes Zeichen als 0-9, a-f oder A-F, so kann dieses direkt anschließend notiert werden. Anderenfalls muss ein Leerzeichen (oder anderes Whitespace-Zeichen) folgen, welches zur Escape-Sequenz gehört und nicht weiter beachtet wird. Ein Zeilenumbruch bestehend aus CR und LF wird in dem Fall jedoch als ein Whitespace-Zeichen angesehen.

\xxx ...

Außerdem kann eine hexadezimale Zahl 6-stellig mit führenden Nullen notiert werden.

\000xxx...
Beachten Sie, dass bei allen drei Arten ein der Zahl folgendes Whitespace-Zeichen als Teil der Escape-Sequenz angesehen und „verschluckt“ wird.

Es folgen noch einmal alle drei Schreibweisen als konkrete Beispiele.

émotion: \E9motion
édition: \E9 dition  –  \E9dition ergäbe ຝition
édition: \0000E9dition