Verwenden von Bytereihenfolgemarken

Stellen Sie einer Unicode-Klartextdatei immer eine Bytereihenfolgenmarkierung voran, die eine Anwendung, die die Datei empfängt, darüber informiert, dass die Datei bytegeordnet ist. Verfügbare Bytereihenfolgemarken sind in der folgenden Tabelle aufgeführt. Da Unicode-Nur-Text eine Sequenz von 16-Bit-Codewerten ist, wird die Bytereihenfolge berücksichtigt, die beim Schreiben des Texts verwendet wird.

Hinweis

Eine Bytereihenfolgemarke 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

Microsoft verwendet UTF-16, little endian byte order.

 

Im Idealfall folgt der gesamte Unicode-Text nur einer Gruppe von Bytereihenfolgeregeln. Dies ist jedoch nicht möglich, da sich Mikroprozessoren in der Platzierung des am wenigsten signifikanten Byte unterscheiden. Intel- und MIPS-Prozessoren positionieren das am wenigsten signifikante Byte zuerst, während Motorola-Prozessoren (und alle byteumkehrten Unicode-Dateien) es zuletzt positionieren. Mit nur einem einzigen Satz Bytereihenfolgeregeln sind Benutzer eines Mikroprozessortyps gezwungen, die Bytereihenfolge jedes Mal auszutauschen, wenn eine einfache Textdatei gelesen oder in diese geschrieben wird, auch wenn die Datei nie auf einem anderen Betriebssystem basierend auf einem anderen Mikroprozessor übertragen wird.

Die bevorzugte Stelle zum Angeben der Bytereihenfolge befindet sich in einem Dateiheader, Textdateien verfügen jedoch nicht über Header. Daher hat Unicode ein Zeichen (U+FEFF) und ein Nichtzeichen (U+FFFE) als Bytereihenfolgemarken definiert. Sie sind Spiegel Bytebilder voneinander.

Da die Sequenz U+FEFF am Anfang einer regulären Nicht-Unicode-Textdatei äußerst selten ist, kann sie als impliziter Marker oder als 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 dafür verwenden, dass es sich bei der Datei höchstwahrscheinlich um eine Unicode-Datei handelt. Vergleichen Sie dieses Verfahren mit der Verwendung des MS-DOS EOF-Markers zum Beenden von Textdateien.

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

Wenn eine Anwendung U+FFFE am Anfang einer Textdatei findet, interpretiert sie sie so, dass es sich bei der Datei um eine byteumgekehrte Unicode-Datei handelt. Die Anwendung kann entweder die Reihenfolge der Bytes austauschen oder den Benutzer benachrichtigen, dass ein Fehler aufgetreten ist.

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

Hinweis

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

 

Verwenden von Sonderzeichen in Unicode