In­for­ma­tio­nen, die über das Internet versendet werden, brauchen eine bestimmte Ordnung. Der Empfänger der Daten (zum Beispiel eine HTML-Seite) muss wissen, wie die In­for­ma­tio­nen zu lesen sind. Um das zu ge­währ­leis­ten, fügt man ver­schie­de­ne Mar­kie­run­gen in den Code ein. Eine solche Mar­kie­rung ist das Byte Order Mark (BOM). Wofür ist der Marker gedacht?

Wozu braucht man das BOM?

Zeichen können auf un­ter­schied­li­che Art und Weisen codiert werden. Während man heut­zu­ta­ge vor allem UTF-8 verwendet, war früher die Kodierung mit UTF-16 populär – die auch heute oft noch genutzt wird. Teilweise verwendet man auch UTF-32. Anders als bei UTF-8 muss bei Ko­die­run­gen mit einer größeren Anzahl von Bits pro Zeichen jedoch die Rei­hen­fol­ge der Bytes bekannt sein.

In einer UTF-8-Kodierung ist jedes Zeichen innerhalb von einem Byte (also 8 Bits) dar­stell­bar. Bei UTF-16 benötigt man hingegen zwei Bytes (also 16 Bits) um ein Zeichen zu codieren. Damit sich das Zeichen also richtig in­ter­pre­tie­ren lässt, muss klar sein, ob die Bytes von links nach rechts oder von rechts nach links gelesen werden. Abhängig davon entsteht nämlich ein komplett anderer Wert.

  • Von links nach rechts: 01101010 00110101 ist in he­xa­de­zi­ma­ler Schreib­wei­se 6a35
  • Von rechts nach links: 01101010 00110101 ist in he­xa­de­zi­ma­ler Schreib­wei­se 356a

Würde man diese Zif­fern­fol­ge jetzt im Kontext einer Unicode-Tabelle sehen, würden zwei voll­kom­men un­ter­schied­li­che Zeichen dar­ge­stellt. Man spricht bei der ersten Lesart von Big Endian (BE), bei der zweiten von Little Endian (LE). Grund dafür ist, dass man beim Big Endian den höheren, beim Little Endian den nied­ri­ge­ren Wert zuerst angibt.

Fakt

Im Alltag ist uns die Notation nach Big Endian näher. Dabei handelt es sich aber nur um eine Kon­ven­ti­on. Computer können mit beiden Spei­cher­me­tho­den umgehen, weshalb eine Mar­kie­rung sinnvoll ist.

Um si­gna­li­sie­ren zu können, in welcher Rei­hen­fol­ge die Bytes zu lesen sind, benötigt man das BOM. Hierbei handelt es sich um ein Zeichen, das nicht sichtbar ist und deshalb auch als zero width no-break space bekannt ist. Es handelt sich also um ein Leer­zei­chen, das eine Breite von Null hat und keinen Zei­len­um­bruch auslöst. In UTF-16 ist dieses Zeichen (he­xa­de­zi­mal) entweder feff (BE) oder fffe (LE). Dieser Wert wird dann der ei­gent­li­chen Zei­chen­co­die­rung vor­an­ge­stellt.

UTF-8 benötigt das BOM ei­gent­lich nicht – und dennoch findet man es auch in Texten, die damit kodiert wurden. Dabei handelt es sich entweder um ein Über­bleib­sel, das bei einer Kon­ver­tie­rung von UTF-16/UTF-32 zu UTF-8 ent­stan­den ist, oder es ist durch einen Editor au­to­ma­tisch eingefügt worden. Denn auch, wenn das Byte Order Mark bei UTF-8 nicht notwendig ist, wirkt es im Regelfall auch nicht störend, da es nicht angezeigt wird.

Pro­blem­fall: Byte Order Mark

Zu Problemen kommt es dann, wenn das emp­fan­gen­de System nicht weiß, wie mit dem BOM umzugehen ist. Manche PHP-Versionen oder ver­schie­de­ne Unix-artige Um­ge­bun­gen rechnen nicht mit dem Zeichnen, was zum Beispiel zu einer feh­ler­haf­ten Dar­stel­lung einer Website führen kann.

Probleme können auch zwischen HTTP und HTML entstehen: Ein HTTP-Header be­inhal­tet von sich aus bereits Angaben zur Zei­chen­ko­die­rung. Diese stammen aus den Ser­ver­ein­stel­lun­gen. Hat man das HTML-Dokument mit BOM erstellt, der HTTP-Header macht aber dem Browser gegenüber eine andere Angabe, kann das ebenfalls zu Dar­stel­lungs­feh­lern führen. Seit einer Änderung der HTML5-Spe­zi­fi­ka­ti­on sollte dies aber nicht mehr auftreten: Dort wurde gefordert, dass das BOM am Anfang die Angaben des HTTP-Headers über­schreibt. Es kann al­ler­dings vorkommen, dass ältere Brow­ser­ver­sio­nen diese Neu­re­ge­lung noch nicht im­ple­men­tiert haben.

BOM entfernen – so geht’s!

Möchte man das Byte Order Mark aus einem Quelltext entfernen, benötigt man einen Text­edi­tor, der das Speichern der Mar­kie­rung als Option anbietet. Man liest die Datei mit BOM in die Software ein, speichert diese dann ohne BOM wieder ab und kon­ver­tiert damit die Kodierung. Die Mar­kie­rung sollte dann nicht mehr auf­tau­chen. Im beliebten Text­edi­tor Notepad++ bei­spiels­wei­se ändert man die Kodierung und kann die Datei dann ohne BOM ab­spei­chern.

Hinweis

In älteren Versionen von Notepad++ findet man noch den Me­nü­ein­trag UTF-8 ohne BOM. In neueren Versionen ent­spricht dies der Angabe UTF-8. Mit Mar­kie­rung wäre der Eintrag ent­spre­chend UTF-8 BOM.

Zum Hauptmenü