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.

Byte Order Mark verschiedener Kodierungen

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 MarkASCII
ANSIKeine BOM-
UTF-72B 2F 76 ( 38 | 39 | 2B | 2F )+/v 89+/
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ÿþ??

In der letzten Spalte (ASCII) sieht man wie die Byte-Sequenz der Byte Order Mark aussehen würde, würde man sie in einem Texteditor als ASCII-Zeichen interpretieren.

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 Programme entsprechende Texte ansonsten auch als ANSI interpretieren könnten.

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.

Interpretation der Byte Order Mark

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 oder dem TextEncoder 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.

Byte Order Mark von Dateien ändern, entfernen oder hinzufügen

Mit dem Programm TextEncoder können Sie die Byte Order Mark von Dateien ändern, entfernen oder hinzufügen. Nachdem Sie den TextEncoder gestartet haben, können Sie dafür folgendermaßen vorgehen:

Die Dateiliste im TextEncoder enthält eine Spalte "BOM". Hier können Sie ablesen, ob Ihre hinzugefügten Dateien aktuell eine Byte Order Mark haben oder nicht.