Freigeben über


Verwenden von Bytereihenfolgenzeichen

Unicode-Textdateien können in mehreren Formaten codiert werden, einschließlich UTF-8, UTF-16 und UTF-32. Jedem dieser Formate kann ein Bytereihenfolgezeichen (BOM) vorangestellt werden, das die Bytereihenfolge angibt, die beim Schreiben des Texts verwendet wird. Verfügbare Bytereihenfolgemarkierungen werden in der folgenden Tabelle aufgeführt. Für UTF-8 ist das Bytereihenfolgezeichen optional, da die Bytes nur in einer Reihenfolge enthalten sein dürfen. Für UTF-16 und UTF-32 ist das Bytereihenfolgezeichen erforderlich, da diese Formate für die Bytereihenfolge vertraulich sind.

Hinweis

Ein Bytereihenfolgezeichen ist kein Steuerelementzeichen, das die Bytereihenfolge des Texts auswählt.

 

Bytereihenfolge-Marke Beschreibung
EF BB BF UTF-8
FF FE UTF-16 Little-Endian
FE FF UTF-16 Big-Endian
FF FE 00 00 UTF-32 Little-Endian
00 00 FE FF UTF-32 Big-Endian

 

Hinweis

Ältere Microsoft-Produkte verwenden für „Unicode“ entweder Windows-1252 oder UCS-2 (fest mit UTF-16), Little-Endian-Byte-Reihenfolge. Für neue Anwendungen wird UTF-8 empfohlen.

 

Im Idealfall folgt der gesamte Unicode-Text nur einer Reihe von Byte-Sortierregeln. Dies ist jedoch nicht möglich, da sich Mikroprozessoren bei der Platzierung des am wenigsten signifikanten Byte unterscheiden. Intel- und MIPS-Prozessoren positionieren zuerst das am wenigsten signifikante Byte, während die Unicode-Prozessoren (und alle Byte-reversed Unicode-Dateien) zuletzt positioniert sind. Bei nur einem einzigen Satz von Bytereihenfolgeregeln werden Benutzer eines Mikroprozessortyps gezwungen, die Bytereihenfolge jedes Mal zu tauschen, wenn eine Nur-Text-Datei von einem anderen Mikroprozessor gelesen oder geschrieben wird, auch wenn die Datei nie auf ein anderes Betriebssystem übertragen wird.

Der bevorzugte Ort zum Angeben der Bytereihenfolge befindet sich in einer Dateikopfzeile, Textdateien weisen jedoch keine Kopfzeilen auf. Daher hat Unicode ein Zeichen (U+FEFF) und einen Nichtcharacter (U+FFFE) als Bytereihenfolgenzeichen definiert. Sie sind Spiegelbytebilder voneinander.

Da die Sequenz U+FEFF zu Beginn einer regulären Nicht-Unicode-Textdatei sehr selten ist, kann sie als implizite Markierung oder Signatur dienen, um die Datei als Unicode-Datei zu identifizieren. Anwendungen, die Sowohl Unicode- als auch Nicht-Unicode-Textdateien lesen, sollten das Vorhandensein dieser Sequenz als Indikator verwenden, dass die Datei höchstwahrscheinlich eine Unicode-Datei ist. Vergleichen Sie diese Technik mit der Verwendung der MS-DOS EOF-Markierung zum Beenden von Textdateien.

Wenn eine Anwendung am Anfang einer Textdatei U+FEFF findet, verarbeitet sie die Datei in der Regel als Unicode-Datei, obwohl sie weitere heuristische Überprüfungen zur Überprüfung durchführen kann. Eine solche Prüfung kann so einfach sein wie Tests, um herauszufinden, ob die Variation in den Byte mit niedriger Reihenfolge viel höher ist als die Variation in den Byte mit hoher Reihenfolge. Wenn beispielsweise ASCII-Text in Unicode-Text konvertiert wird, ist jedes zweite Byte 0. Außerdem kann die Überprüfung auf die Zeilenvorschub- und Wagenrücklaufzeichen (U+000A und U+000D) und die gerade oder ungerade Dateigröße einen starken Indikator für die Art der Datei bieten.

Wenn eine Anwendung am Anfang einer Textdatei U+FFFE findet, bedeutet dies, dass es sich bei der Datei um eine Byte-reversed Unicode-Datei handelt. Die Anwendung kann entweder die Reihenfolge der Bytes tauschen oder den Benutzer benachrichtigen, dass ein Fehler aufgetreten ist.

Da das Unicode-Bytereihenfolgezeichenzeichenzeichen auf keiner Codeseite gefunden wird, wird es ausgeblendet, wenn Daten in ANSI konvertiert werden. Im Gegensatz zu anderen Unicode-Zeichen wird sie nicht durch ein Standardzeichen ersetzt, wenn es konvertiert wird. Wenn eine Bytereihenfolgemarke in der Mitte einer Datei gefunden wird, wird sie nicht als Unicode-Zeichen interpretiert und hat keine Auswirkung auf die Textausgabe.

Hinweis

Der Unicode-Wert U+FFFF ist in Nur-Text-Dateien unzulässig und kann nicht zwischen Anwendungen übergeben werden. Sie ist für die private Verwendung einer Anwendung reserviert.

 

Verwenden von Sonderzeichen in Unicode