Byte Order Mark
Als Byte Order Mark (BOM; deutsch: „Byte-Reihenfolge-Markierung“) wird eine charakteristische Bytefolge am Anfang eines Datenstroms bezeichnet, die das Unicode-Zeichen U+FEFF (Skriptfehler: Ein solches Modul „Vorlage:lang“ ist nicht vorhanden.) kodiert. Diese Bytefolge dient als Kennung zur Definition der Byte-Reihenfolge und Kodierungsform in UCS/Unicode-Zeichenketten, insbesondere Textdateien.
In UTF-16 und UTF-32[Bearbeiten]
Bei den Kodierungen UTF-16 und UTF-32 muss die Byte-Reihenfolge angegeben werden, da hier die einzelnen Zeichen jeweils in mindestens 16 oder 32 Bit großen Werten kodiert sind und damit mehrere Bytes benötigen (UTF-16: 2 Bytes, UTF-32: 4 Bytes). Das Byte Order Mark kennzeichnet dabei, in welcher Reihenfolge die Bytes auszuwerten sind. 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.
In UTF-32 besteht das BOM
- in Big-Endian-Notation aus der Sequenz
00 00 FE FF - in der Little-Endian-Notation aus
FF FE 00 00.
Da das Zeichen U+FFFE als ungültig definiert ist, kann durch die Reihenfolge der ersten Bytes eindeutig die Auswertungs-Reihenfolge für alle folgenden Bytes festgestellt werden.
In UTF-8[Bearbeiten]
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 war erlaubt, um die Verwendung von UTF-8 als Kodierung zu kennzeichnen.
Wegen technischer Probleme, die durch die Verwendung von BOMs entstehen, wie etwa Speicherplatzverschwendung, Reduzierung der Performanz eines verarbeitenden Programms, versehentlich redundante BOMs nach dem Zusammenfügen von Texten, empfiehlt der Unicodestandard, BOMs nur zu verwenden, wenn sie ausdrücklich gefordert werden, und sie ansonsten bei der Verarbeitung aus Texten zu entfernen.<ref>Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. In: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Unicode Konsortium, Skriptfehler: Ein solches Modul „DateTime“ ist nicht vorhanden. ehemals im Vorlage:Referrer (nicht mehr online verfügbar) (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref>
Eine sichere Unterscheidung zwischen UTF-8 und den ISO-8859-Zeichensätzen ist durch die Verwendung eines BOM 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, dann ist die pragmatische Annahme durchaus üblich, dass die Zeichenfolge  nicht gemeint ist, und daraus folgend, dass eine UTF-8-Kodierung vorliegt.
In Java wird beim Einlesen von UTF-8-Texten das Byte Order Mark nicht automatisch erkannt. Es ist Sache der Anwendungssoftware, das daraus generierte Zeichen 0xFEFF bei Bedarf zu entfernen.<ref>Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Ehemals im Vorlage:Referrer (nicht mehr online verfügbar)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref>
Weiteres[Bearbeiten]
Wird ein Byte Order Mark verwendet, so kann es zu Problemen mit Programmen kommen, die ein BOM nicht erwarten oder nicht kennen:
- in Unix-artigen Umgebungen wird in Skriptdateien oft der Shebang-Mechanismus verwendet, bei dem die Zeichenfolge „#!“ ebenfalls am Dateianfang stehen muss; steht hier stattdessen ein unerwartetes BOM, so gibt es Probleme.
- Compiler wie z. B. gcc (vor Version 4.4<ref>Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Ehemals im Vorlage:Referrer (nicht mehr online verfügbar)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref>) melden bei Verwendung eines BOM überschüssige Zeichen am Dateianfang
- in PHP mit Standardeinstellungen<ref>Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Ehemals im Vorlage:Referrer (nicht mehr online verfügbar)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref> führt das BOM zur Ausgabe von Zeichen an den Browser, so dass ohne „output buffering“ keine HTTP-Header mehr geändert werden können.
Tabellarische Übersicht[Bearbeiten]
| Kodierung | hexadezimale Darstellung | dezimale Darstellung | Darstellung nach Windows-1252 |
|---|---|---|---|
| UTF-8 | EF BB BF<ref>Vorlage:RFC-Internet</ref>
|
239 187 191
|

|
| UTF-16 (BE) | FE FF
|
254 255
|
þÿ
|
| UTF-16 (LE) | FF FE
|
255 254
|
ÿþ
|
| UTF-32 (BE) | 00 00 FE FF
|
0 0 254 255
|
␀␀þÿ
|
| UTF-32 (LE) | FF FE 00 00
|
255 254 0 0
|
ÿþ␀␀
|
| UTF-7 | 2B 2F 76 und ein Zeichen aus:[ 38 | 39 | 2B | 2F ]<ref>Nur die höchstwertigen 6 Bits des vierten Byte. Die untersten beiden Bits sind von dem nachfolgenden Zeichen bestimmt</ref>
|
43 47 118 und ein Zeichen aus:[ 56 | 57 | 43 | 47 ]
|
+/v und ein Zeichen aus:[ 8 | 9 | + | / ]
|
| UTF-1 | F7 64 4C
|
247 100 76
|
÷dL
|
| UTF-EBCDIC | DD 73 66 73
|
221 115 102 115
|
Ýsfs
|
| SCSU | 0E FE FF (von anderen möglichenBytefolgen wird abgeraten)<ref>Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Ehemals im Vorlage:Referrer (nicht mehr online verfügbar)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref> |
14 254 255
|
␎þÿ
|
| BOCU-1 | FB EE 28 optional gefolgt von FF<ref>Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Ehemals im Vorlage:Referrer (nicht mehr online verfügbar)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref>
|
251 238 40 optional gefolgt von 255
|
ûî( optional gefolgt von ÿ
|
| GB 18030 | 84 31 95 33
|
132 49 149 51
|
„1•3
|
Siehe auch[Bearbeiten]
Weblinks[Bearbeiten]
- The Unicode Standard, chapter 2.6 Encoding Schemes. (PDF; 1,1 MB) unicode.org (englisch).
- The Unicode Standard, chapter 2.13 Special Characters and Noncharacters, section Byte Order Mark (BOM). (PDF; 1,1 MB) unicode.org (englisch).
- The Unicode Standard, chapter 16.8 Specials, section Byte Order Mark (BOM): U+FEFF. (PDF; 415 kB) unicode.org (englisch).
- Unicode FAQ: UTF-8, UTF-16, UTF-32 & BOM. unicode.org (englisch).
Einzelnachweise[Bearbeiten]
<references />