Von ASCII bis UTF-8 im Detail

Und es hat BOM gemacht

Die Byte-Order-Mark

Wenn ein Gerät oder eine Software eine Datei lesen soll, von der die Kodierung nicht bekannt ist, ist das problematisch: In welche Zeichen sollen die Bitfolgen (Zahlenwerte) überführt und dargestellt werden? Schön wäre, wenn direkt am Anfang so etwas stünde wie „hier kommt eine in UTF8 kodierte Datei” oder „diese Datei ist in UTF16LE kodiert”.

Das geht in der Tat: Bestimmte Bitfolgen am Anfang einer Datei können signalisieren, welche Unicode-Kodierung in ebendieser Datei zum Einsatz kommt. Diese Markierung nennt man dann eine Byte Order Mark. Das sind einfach ein paar (nicht-druckbare) Zeichen, die in Unicode-Dateien angeben, um welche Kodierung es sich im Detail handelt: UTF8, UTF16LE, UTF16BE oder eine sonstige Unicode-Kodierung.

Die BOM für UTF-8 besteht aus drei Bytes mit den folgenden Werten (hier, wie meistens, hexadezimal angegeben):
EF BB BF

Programme, die Dateien in Unicode-Kodierungen speichern, können eine BOM an den Anfang der Datei setzen. Programme, die ensprechende Dateien verarbeiten, können diese dann gleich nach dem Öffnen der Datei auslesen und den restlichen Inhalt dann entsprechend verarbeiten (z.B. darstellen).

Eine BOM ist allerdings kein Muss! Je nach Kontext, z.B. als Webseite, sollte eine Datei keine BOM haben. Die BOM kann überall dort störend wirken, wo die mögliche Kodierung nicht auf Unicode beschränkt ist. Theoretisch könnte es ja mal eine Kodierung geben, bei der die Folge EF-BB-BF für einen ganz normalen Buchstaben steht oder eine sonstige Bedeutung hat.

Hinweise zum Thema Webseiten

Wenn unicode-kodierte Dateien mit Web-Browsern angeschaut werden, sollten sie keine BOM enthalten. Ein Browser muss für Dateien in allen möglichen Kodierungen offen sein und wird daher die BOM meist als Text zu interpretieren versuchen. Das Ergebnis sind lustig aussehende Zeichen am Anfang der Seite.

Ein Web-Browser erfährt aus anderen Quellen, um welche Kodierung es sich bei einer Web-Seite handelt. Das kann bereits durch den Web-Server (im Content-Type-Header) vorausgeschickt werden oder im Kopf der Seite stehen. Letzteres sieht bei HTML5 so aus:
<meta charset="UTF-8">

Weitere Informationen zu Webseiten und Kodierung stehen in meinen Tips für Web‑Profis.

Teil 7 ←

© Hermann Faß, 2013