Darstellungsprobleme durch das UTF-8-BOM

Bei UTF-8-codierten Seiten werden in einigen Browsern eine Leerzeile oder unerwünschte Zeichen am Seitenanfang bzw. am Anfang einer eingefügten Datei dargestellt. Wie lassen sich diese entfernen?

Antwort

Wird eine Datei in UTF-8 codiert, dann kann die UTF-8-Signatur (Byte Order Mark, BOM) Darstellungsprobleme hervorrufen, wenn das Nutzerprogramm (Browser) diese nicht erkennt. This used to be a problem for static HTML files, but is no longer in recent versions of major browsers. However, if you use PHP to generate your HTML, this was still an issue with PHP version 5.3.6.

Das BOM befindet sich ganz am Anfang einer Datei, deshalb sind solche Darstellungsprobleme am Seitenanfang zu erwarten. Es können aber auch Leerzeilen innerhalb einer Seite auftreten, wenn Text aus einer anderen Datei eingefügt wird, die mit einem BOM beginnt.

Dieser Artikel soll Ihnen helfen zu erkennen, ob UTF-8 Ursache des Problems ist. Wenn kein BOM am Dateianfang vorhanden ist, muss woanders nach der Lösung gesucht werden.

Was ist die UTF-8-Signatur (BOM)?

Einige Anwendungen fügen am Anfang einer Datei eine spezielle Folge von Bytes ein um anzuzeigen, dass es sich bei dem Text in der Datei um Unicode handelt. Diese Bytefolge wird Signatur oder Byte Order Mark (BOM) genannt. Einige Progamme (z.B. Texteditoren oder Browser) stellen das BOM als Leerzeile dar, andere stellen unerwartete Zeichen dar ().

Weitere Informationen zum BOM finden Sie in der Randbemerkung.

Das BOM ist der Unicode-Zeichencode U+FEFF, der dem Zeichen ZERO WIDTH NO-BREAK SPACE entspricht. (Anmerkung des Übersetzers: Inzwischen dient das Zeichen U+FEFF ausschließlich als BOM. Es sollte nicht mehr als nullbreites geschütztes Leerzeichen verwendet werden; diesen Zweck erfüllt das Zeichen U+2060 WORD JOINER.)

Bei den Zeichencodierungen UTF-16 und UTF-32 ist das BOM erforderlich, damit der Dateiinhalt korrekt interpretiert werden kann (wenn nicht ein anderer Indikator für die Bytereihenfolge vorhanden ist). Jedes Zeichen wird durch 2 bzw. 4 Bytes repräsentiert, wobei deren Reihenfolge wichtig ist. Das BOM gibt diese Reihenfolge an.

Bei UTF-8 ist im Gegensatz dazu kein BOM erforderlich, denn dort gibt es nur eine mögliche Reihenfolge der Bytes. Das BOM kann dennoch in UTF-8-codiertem Text auftreten, entweder als Nebenprodukt einer Umwandlung der Zeichencodierung oder weil es durch ein Editorprogramm hinzugefügt wurde.

Das BOM erkennen

Zunächst ist zu prüfen, ob tatsächlich ein BOM am Dateianfang vorhanden ist.

Sie können versuchen, das BOM im Dateiinhalt zu erkennen, doch wenn Ihr Editor das BOM richtig behandelt, wird es nicht zu sehen sein. Ein Editor, der das BOM nicht richtig behandelt, zeigt die Zeichen an, die den Bytes in der eingestellten Zeichencodierung entsprechen. (Bei Latin-1 (ISO 8859-1) sind dies die Zeichen .) Ein Hex-Editor, der die einzelnen Bytewerte anzeigt, zeigt das BOM als EF BB BF.

Möglicherweise zeigt Ihr Editor in der Statuszeile oder einem Menü, welche Zeichencodierung verwendet wird und ob ein BOM vorhanden ist oder nicht.

Andernfalls könnte ein Test-Script (siehe unten) hilfreich sein. (Wenn Sie das Problem in einer per PHP o.a. Mechanismus eingefügten Datei vermuten, geben Sie den URI der eingefügten Datei an.)

Das BOM entfernen

In einem Editor, der das BOM als unerwünschte Zeichen darstellt, können Sie diese löschen. Wahrscheinlicher ist aber, dass ein vorhandenes BOM gar nicht zu sehen ist.

Überprüfen Sie, ob Ihr Editor ermöglicht einzustellen, ob beim Speichern ein BOM hinzugefügt wird bzw. erhalten bleibt. Solch ein Editor erlaubt es Ihnen, auf einfache Weise das BOM zu entfernen: die Datei einlesen und wieder speichern. Wenn z.B. Dreamweaver ein BOM erkennt, dann ist in der Dialogbox „Speichern unter“ eine Checkbox „Unicode-Signatur (BOM) einschließen“. Dort einfach das Häkchen entfernen und speichern.

Ein Script bietet u.a. den Vorteil, dass es das BOM schnell entfernen kann – auch in mehreren Dateien. Solch ein Script könnte automatisch als Teil des Arbeitsprozesses laufen. Wenn Sie Perl verwenden, können Sie dieses einfache Script von Martin Dürst nutzen.

Anmerkung: Überprüfen Sie, welchen Einfluss die Entfernung des BOM hat. Es könnte sein, dass irgendein Teil in ihrem Arbeitsprozess das BOM benötigt um zu erkennen, dass eine Datei UTF-8-codiert ist. Beachten Sie auch, dass Seiten mit einem hohen Anteil an lateinischen Buchstaben auf den ersten Blick korrekt aussehen, aber vereinzelte Nicht-ASCII-Zeichen (außerhalb des Bereichs U+0000 bis U+007F) nicht korrekt codiert sein könnten.

Übrigens

Einige Texteditoren wie bspw. Windows Notepad fügen immer ein BOM ein, wenn eine Datei UTF-8-codiert gespeichert wird.

Ein BOM am Anfang einer CSS-Datei kann in einigen Browsern dazu führen, dass die erste Regel ignoriert wird.

Wenn ein BOM vorhanden ist, interpretieren manche Browser den Text als UTF-8-codiert, auch wenn eine andere Zeichencodierung angegeben ist.