Unicode-Logo Unicode
Kodierungen
Techniken

Als Byte Order Mark (BOM, dt. „Bytereihenfolge-Markierung“) wird das Unicode-Zeichen an Position U+FEFF (zero width no-break space) bezeichnet, wenn es verwendet wird, um die Byte-Reihenfolge einer in UTF-16 oder UTF-32 kodierten UCS/Unicode Zeichenkette anzugeben und/oder um den entsprechenden Text als in UTF-8, UTF-16 oder UTF-32 kodiert zu markieren.

Bei den Kodierungen UTF-16 und UTF-32 muss die Byte-Reihenfolge angegeben werden, da die Zeichen jeweils mindestens entweder in 16 oder 32 Bit großen Werten kodiert sind und damit mehrere Bytes benötigen. Das Byte Order Mark kennzeichnet dabei, in welcher Reihenfolge die Bytes ausgewertet werden müssen. Diese Markierung wird immer dann besonders wichtig, wenn Daten zwischen unterschiedlichen Systemen ausgetauscht werden.

In UTF-16 besteht das BOM in Big-Endian-Notation aus der Zweibyte-Sequenz FE FF, in der Little-Endian-Notation umgekehrt aus FF FE. Da das Zeichen U+FFFE als ungültig definiert ist, kann durch die Reihenfolge der zwei Bytes eindeutig die Reihenfolge der Bytes festgestellt werden. Bei UTF-32 stehen davor oder dahinter noch zwei Nullbytes, die zur Erkennung der Byte-Reihenfolge dienen.

Die UTF-8-Kodierung des BOM besteht aus der Bytesequenz EF BB BF, die in nicht UTF-8-fähigen Texteditoren und Browsern meist als ISO-8859-1-Zeichen  erscheinen. Bei UTF-8 stellt sich das Problem der Byte-Reihenfolge zwar nicht, doch ein BOM am String- oder Dateianfang ist erlaubt, um die Verwendung von UTF-8 als Kodierung zu kennzeichnen. Eine sichere Unterscheidung zwischen UTF-8 und den ISO-8859-Zeichensätzen ist dadurch zwar nicht gewährleistet, da in den 8-Bit-Zeichensätzen alle Bytesequenzen erlaubt sind, auch die UTF-8-Kodierung des BOM; wenn aber die Alternative speziell UTF-8 oder ISO 8859-1 ist, ist die pragmatische Annahme, dass die Zeichenfolge  nicht gemeint ist, durchaus üblich.

Wird ein BOM verwendet, kann es jedoch auch zu Problemen mit Programmen kommen, die kein Byte Order Mark erwarten oder kennen. So wird in Unix-artigen Umgebungen oft die Shebang verwendet, welche ebenfalls am Dateianfang stehen muss. Auch melden Compiler wie z. B. gcc bei Verwendung eines BOM überschüssige Zeichen am Dateianfang, und in PHP vor Version 6[1] mit Standardeinstellungen[2] führt die BOM zur Ausgabe von Zeichen an den Browser, so dass ohne „output buffering“ keine HTTP-Header mehr geändert werden können.

Bytefolgen der BOM in verschiedenen Zeichenkodierungen

Kodierung Bytefolge
UTF-8 EF BB BF
UTF-16 Big Endian FE FF
UTF-16 Little Endian FF FE
UTF-32 Big Endian 00 00 FE FF
UTF-32 Little Endian FF FE 00 00

Weblinks

Einzelnachweise

  1. http://bugs.php.net/bug.php?id=22108#c101624
  2. http://bugs.php.net/bug.php?id=22108#c80307

Wikimedia Foundation.

Игры ⚽ Нужно сделать НИР?

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”