InfoCenter

Byte Order Mark (BOM)

Die Byte Order Mark ist ein Unicode Zeichen, dass die Byte-Reihenfolge (Endianness) einer Unicode-Datei oder eines Unicode-Streams anzeigt. Dieses Zeichen hat die Unicode Position U+FEFF und kann auch dazu verwendet werden, die Kodierung einer Textdatei zu bestimmen. Das Zeichen steht immer an erster Stelle in der Datei und wird von der Software, die das entsprechende Format unterstützt, nicht als Bestandteil des Textes interpretiert. Ein Vorteil dieser Handhabung ist, dass keine weiteren Informationen zu der Datei mitgeliefert werden müssen und sich der Interpretations-Schlüssel damit direkt in der Datei befindet.

Je nachdem, in welcher Kodierung eine Datei abgespeichert wird, ergeben sich unterschiedliche Byte-Folgen für das Zeichen U+FEFF. Die Bytefolgen für die gängisten Kodierungen sind in dieser Tabelle zusammen gefasst:

KodierungByte Order Mark
ANSIKeine BOM
UTF-72B 2F 76 ( 38 | 39 | 2B | 2F )
UTF-8EF BB BF
UTF-16 Big EndianFE FF
UTF-16 Little EndianFF FE
UTF-32 Big Endian00 00 FE FF
UTF-32 Little EndianFF FE 00 00

Zwingend erforderlich, um eine entsprechende Datei eindeutig lesen zu können, ist die Byte Order Mark in den Kodierungen UTF-16 und UTF-32, da in diesen Kodierungen ein Zeichen mehrere Bytes belegt und die Byte Order Mark anzeigt, in welcher Reihenfolge die Bytes zu interpretieren sind (siehe zur Byte Reihenfolge Big Endian und Little Endian). Bei den Kodierungen UTF-8 und UTF-7 dagegen ist die BOM nicht zwingend erforderlich, führt aber dennoch zu eindeutigeren Ergebnissen, da viele Programme entsprechende Texte ansonsten als ANSI interpretieren würden.

Dass durch die BOM die Reihenfolge gekennzeichnet wird, lässt sich leicht beim Vergleich der Bytefolgen zwischen Big Endian (Beginn bei höchstwertigem Bit) und Little Endian (Beginn bei niederwertigstem Bit) erkennen, da diese beiden Kodierungen eine gegenläufige Byte Reihenfolge haben. Einmal ist die Byte Reihenfolge FE FF und einmal mit FF FE genau anders herum. Da bei UTF-32 generell vier Bytes pro Zeichen verwendet werden, ist ebenfalls ersichtlich, wieso die Kodierungen hier bei 00 00 FE FF und FF FE 00 00 liegen.

Zu Problemen und falschen Darstellung unter Verwendung der Byte Order Mark kann es kommen, wenn Programme die BOM nicht interpretieren können und stattdessen ANSI Zeichen anzeigen, zum Beispiel  für die BOM von UTF-8 (EF BB BF). Hier gibt es eine kleine Problematik, da auch in ANSI Dateien die Byte Sequenz EF BB BF erlaubt ist und die entsprechende Datei dann fälschlicherweise, sofern diese Sequenz am Anfang steht, als UTF-8 interpretiert werden könnte. Mit Software wie dem TextKonverter können Sie problemlos sowohl Dateien mit als auch ohne Byte Order Marke einlesen und schreiben. Außerdem ist es mit diesem Programm möglich das Format einer Datei zu ändern oder eine Byte Order Mark hinzuzufügen oder zu entfernen.

Kommt das Zeichen U+FEFF an einer anderen Stelle als an der ersten Position in einer Datei vor, so ist es als ein Zeichen mit einer Breite von 0 und keinem Umbruch zu werten. Allerdings ist die absichtliche Verwendung dieses Zeichens für diesen Zweck veraltet, da das Zeichen nun nur noch als Byte Order Mark verwendet werden sollte. Stattdessen sollte nun das Zeichen U+2060 für diesen Zweck verwendet werden.