1141 Stimmen

Was ist der Unterschied zwischen UTF-8 und UTF-8 mit BOM?

Was ist der Unterschied zwischen UTF-8 und UTF-8 mit BOM?

89 Stimmen

UTF-8 kann besser durch Inhalte als durch BOM automatisch erkannt werden. Die Methode ist einfach: Versuchen Sie, die Datei (oder einen String) als UTF-8 zu lesen, und wenn dies gelingt, nehmen Sie an, dass die Daten UTF-8 sind. Andernfalls gehen Sie davon aus, dass es sich um CP1252 (oder eine andere 8-Bit-Codierung) handelt. Jede nicht-UTF-8-acht-Bit-Codierung wird fast sicher Sequenzen enthalten, die von UTF-8 nicht erlaubt sind. Reines ASCII (7-Bit) wird als UTF-8 interpretiert, aber das Ergebnis ist auch so korrekt.

53 Stimmen

Das Scannen großer Dateien nach UTF-8-Inhalten dauert einige Zeit. Ein BOM beschleunigt diesen Prozess erheblich. In der Praxis müssen Sie oft beides tun. Der Übeltäter heutzutage ist, dass immer noch viele Textinhalte nicht Unicode sind, und ich stoße immer noch auf Tools, die behaupten, sie würden Unicode (zum Beispiel UTF-8) verwenden, aber ihren Inhalt in einer anderen Codepage ausgeben.

11 Stimmen

@Tronic Ich denke nicht wirklich, dass "besser" in diesem Fall passt. Es kommt auf die Umgebung an. Wenn Sie sicher sind, dass alle UTF-8-Dateien mit einem BOM markiert sind, ist das Überprüfen des BOM der "bessere" Weg, da er schneller und zuverlässiger ist.

9voto

Wernfried Domscheit Punkte 45772

Es ist zu beachten, dass für einige Dateien du auf Windows keinesfalls das BOM haben solltest. Beispiele sind SQL*plus oder VBScript Dateien. Falls solche Dateien ein BOM enthalten, erhältst du einen Fehler, wenn du versuchst, sie auszuführen.

7voto

pib Punkte 3263

Wird am unteren Rand der Wikipedia-Seite zu BOM zitiert: http://en.wikipedia.org/wiki/Byte-order_mark#cite_note-2

"Die Verwendung eines BOM ist weder erforderlich noch für UTF-8 empfohlen, kann jedoch in Kontexten auftreten, in denen UTF-8-Daten aus anderen Enkodierungsformen konvertiert werden, die einen BOM verwenden, oder in denen der BOM als UTF-8-Signatur verwendet wird"

2 Stimmen

Hast du ein Beispiel, wo die Software entscheidet, ob sie UTF-8 mit/ohne BOM verwenden soll, basierend darauf, ob die vorherige Codierung, von der sie kodiert wird, ein BOM hatte oder nicht?! Das scheint eine absurde Behauptung zu sein

7voto

James Wakefield Punkte 526

UTF-8 mit BOM hilft nur, wenn die Datei tatsächlich einige Nicht-ASCII-Zeichen enthält. Wenn es hinzugefügt wird und keine vorhanden sind, kann es ältere Anwendungen möglicherweise zum Absturz bringen, die die Datei ansonsten als einfachen ASCII-Text interpretiert hätten. Diese Anwendungen werden auf jeden Fall scheitern, wenn sie auf ein Nicht-ASCII-Zeichen stoßen, daher sollte meiner Meinung nach der BOM nur hinzugefügt werden, wenn die Datei nicht mehr als einfacher ASCII-Text interpretiert werden kann und sollte.

Ich möchte klarstellen, dass ich es bevorzuge, überhaupt keinen BOM zu haben. Fügen Sie ihn hinzu, wenn einige alte Software ohne ihn abstürzt und die Aktualisierung dieser Legacy-Anwendung nicht machbar ist.

Erwarten Sie für UTF-8 nichts außer einem BOM.

1 Stimmen

Es ist nicht sicher, dass nicht UTF8-bewusste Anwendungen scheitern werden, wenn sie auf UTF8 stoßen. Der ganze Sinn von UTF8 ist, dass viele Dinge einfach funktionieren. wc(1) wird eine korrekte Zeilen- und Oktetanzahl sowie eine korrekte Wortanzahl liefern, wenn keine nur-Unicode-Leerzeichen verwendet werden.

1 Stimmen

Ich stimme dir @Jasen zu. Ich versuche herauszufinden, ob ich diese alte Antwort einfach löschen soll. Meine aktuelle Meinung ist, dass die Antwort einfach keine BOM hinzufügen sollte. Der Endbenutzer kann eine hinzufügen, wenn er eine Datei hacken muss, um sie mit veralteter Software zum Laufen zu bringen. Wir sollten keine Software erstellen, die dieses falsche Verhalten perpetuiert. Es gibt keinen Grund, warum eine Datei nicht mit einem Null-Breiten-Nicht-Verbinder beginnen könnte, der als Eins interpretiert werden soll.

6voto

user1358065 Punkte 103

Ich betrachte dies aus einer anderen Perspektive. Ich denke, dass UTF-8 mit BOM besser ist, da es mehr Informationen über die Datei liefert. Ich verwende nur UTF-8 ohne BOM, wenn ich auf Probleme stoße.

Ich verwende schon seit langer Zeit mehrere Sprachen (sogar Kyrillisch) auf meinen Seiten, und wenn die Dateien ohne BOM gespeichert werden und ich sie zum Bearbeiten mit einem Editor öffne (wie auch cherouvim angemerkt hat), werden einige Zeichen beschädigt.

Beachten Sie, dass das klassische [Notepad](http://en.wikipedia.org/wiki/Notepad%28software%29) von Windows automatisch Dateien mit einem BOM speichert, wenn Sie versuchen, eine neu erstellte Datei mit UTF-8-Kodierung zu speichern._

Ich speichere persönlich serverseitige Skriptdateien (.asp, .ini, .aspx) mit BOM und .html-Dateien ohne BOM.

4 Stimmen

Vielen Dank für den ausgezeichneten Tipp zum Windows-Classic-Notepad. Ich habe bereits einige Zeit damit verbracht, das genau gleiche herauszufinden. Meine Konsequenz war, anstelle des Windows-Classic-Notepads immer Notepad++ zu verwenden. :-)

0 Stimmen

Du solltest besser MadEdit verwenden. Es ist der einzige Editor, der im Hex-Modus ein Zeichen anzeigt, wenn du eine UTF-8-Byte-Sequenz auswählst, anstatt einer 1:1-Basis zwischen Byte und Zeichen. Ein Hex-Editor, der sich eines UTF-8-Datei bewusst ist, sollte sich so verhalten wie MadEdit!

0 Stimmen

@brighty Ich denke nicht, dass du eins für eins brauchst, um des BOM willen. Es spielt keine Rolle, es bedarf nicht viel, um zu erkennen, dass ein utf-8 BOM efbbbf oder fffe (oder fffe bei falscher Lesung) ist. Man kann diese Bytes einfach löschen. Es ist jedoch nicht schlecht, für den Rest der Datei eine Zuordnung zu haben, um auch Byte für Byte löschen zu können.

6voto

Florin Sima Punkte 1461

Wenn Sie Informationen im UTF-8-Format anzeigen möchten, treten möglicherweise keine Probleme auf. Deklarieren Sie zum Beispiel ein HTML-Dokument als UTF-8, und Sie werden alles im Browser angezeigt bekommen, was im Body des Dokuments enthalten ist.

Dies trifft jedoch nicht zu, wenn es um Text, CSV- und XML-Dateien geht, sei es auf Windows oder Linux.

Beispielsweise ist eine Textdatei auf Windows oder Linux, eines der einfachsten Dinge überhaupt, meistens nicht in UTF-8.

Speichern Sie es als XML und deklarieren Sie es als UTF-8:

Es wird nicht korrekt angezeigt werden (nicht korrekt gelesen), auch wenn es als UTF-8 deklariert ist.

Ich hatte eine Zeichenfolge mit französischen Buchstaben, die als XML für die Syndizierung gespeichert werden mussten. Ohne von Anfang an eine UTF-8-Datei zu erstellen (Optionen im IDE ändern und "Neue Datei erstellen") oder das BOM am Anfang der Datei hinzuzufügen.

$file="\xEF\xBB\xBF".$string;

Ich konnte die französischen Buchstaben nicht in einer XML-Datei speichern.

4 Stimmen

Ich weiß, dass dies eine alte Antwort ist, aber ich möchte nur erwähnen, dass sie falsch ist. Textdateien auf Linux (kann nicht für andere Unix-Systeme sprechen) sind in der Regel UTF-8.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X