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

Was ist der Unterschied zwischen UTF-8 und UTF-8 ohne BOM? Was ist besser?

  • UTF-8 kann automatisch erkannt besser vom Inhalt als von BOM. Die Methode ist einfach: versuchen Sie, die Datei zu Lesen (oder eine Zeichenfolge) als UTF-8 und wenn das gelingt, davon ausgehen, dass die Daten UTF-8. Ansonsten davon ausgehen, dass es CP1252 (oder einen anderen 8-bit-encoding). Alle nicht-UTF-8-bit-Codierung wird mit ziemlicher Sicherheit enthalten Sequenzen, die nicht erlaubt sind durch UTF-8. Reines ASCII (7-bit) wird interpretiert als UTF-8, aber das Ergebnis ist korrekt, auch so.
  • Das Scannen von großen Dateien UTF-8 content braucht Zeit. Eine Stückliste wird dieser Prozess viel schneller. In der Praxis ist es oft notwendig, beides zu tun. Der Täter ist heute, dass noch eine Menge von text-Inhalten ist nicht Unicode, und ich noch bump in tools, die sagen, Sie tun Unicode (z.B. UTF-8) aber Strahlen Ihre Inhalte mit einem anderen Zeichensatz.
  • Ich glaube nicht wirklich, dass "besser" passt in diesem Fall. Es hängt von der Umgebung ab. Wenn Sie sicher, dass alle UTF-8-Dateien sind gekennzeichnet mit einem Stückliste über die Prüfung der Stückliste ist der "bessere" Weg, weil es schneller und zuverlässiger.
  • UTF-8 nicht über einen BOM. Wenn man eine U+FEFF-code Punkt am Anfang einer UTF-8-Datei, muss mit besonderer Sorgfalt vorgenommen werden, damit umzugehen. Dies ist nur ein Microsoft-Namensgebung liegt, wie das aufrufen einer Codierung "Unicode", wenn es keine solche Sache.
  • Es gibt keine Methode, die immer klappt. Metadaten können falsch sein - er kann sagen, Latin1, sondern tatsächlich in UTF-8 oder Umgekehrt. Daten können beschädigt werden oder falsch generiert, so nur, weil es ungültig ist UTF-8 bedeutet nicht, dass es nicht am besten interpretiert als "UTF-8 mit ein bisschen Korruption". Oft das ist, was es sein wird. BOM hilft die Unterscheidung zwischen "fehlerhaften/Ungültigen UTF-8" und "korrupten/ungültigen Latin1"
  • Sie in der Regel nicht wollen, es sei denn, Sie haben einen spezifischen Bedarf. Es kann zurückgegeben werden, in Ihren HTML-Code aus einem PHP-fragment zum Beispiel. Die moderne Mainframe (und AIX) ist little-endian-UTF-8-gerüstet, sogar wenn dies ist nicht "native". So lange, wie Sie zu standardisieren, sollten Sie OK sein.
  • "Die moderne Mainframe (und AIX) ist little-endian-UTF-8 aware" UTF-8 nicht über einen Ausgang! es ist kein mischen von bytes um zu setzen, Paare oder Gruppen von vier in der richtigen "Reihenfolge" für ein bestimmtes system! Zu erkennen, dass eine UTF-8-byte-Sequenz kann es nützlich sein zu beachten, dass das erste byte einer multi-byte-Sequenz "codepoint" (die bytes sind NICHT "einfache" ASCII-Bilder) hat das MS-bit gesetzt und alle ein bis drei weitere sukzessive weniger signifikanten bits, gefolgt von einem reset bit. Die Gesamtanzahl der bits ist weniger bytes, die in diesem Codepunkt, und Sie werden ALLE haben das MSB gesetzt...
  • Es ist kein Unterschied, als utf-8 ohne BOM. Utf-8 + BOM ist in utf-8+ BOM, eine nicht-standard: verwendet mein microsoft -, und vielleicht noch einige andere.
  • In diesem Fall hilft jemand anderes, mir ist aufgefallen, dass (für websites zumindest), im IIS auf Windows-Servern, speichern Sie Ihre Dateien immer als UTF-8 mit BOM (und regelmäßige notepad tut dies, wenn Sie wählen Sie es in der Codierung Dropdown-Menü in der "Speichern Als" - dialog). Aber auf Unix-Servern, habe ich immer meine Dateien als UTF-8 ohne BOM (da hatte ich Probleme der Zeichenkodierung, wenn mein apache-server Lesen würde mein PHP-Dateien, wenn Sie hatte die BOM). Notepad++ hat eine große "Encoding" - Menü, um zu helfen, zu konvertieren von einem zum anderen.
  • Das Lesen dieser Diskussion über die (vermeintliche) Dienstprogramm zum hinzufügen eines BOM, ich Frage mich: Wie die meisten anderen codepages nicht haben oder (vermeintlich) brauchen eine codepage Identifizierung, warum UTF tut? Warum nur die codepage(s), die geändert werden müssen, ist (sind) UTF? Warum nicht eine BOM (oder gleichwertig erkennen Codierung) für die windows-1252-oder DOS-852 oder ISO 8859-1? Das ist eine ziemlich unfaire Forderung. Eine, die nur will Microsoft zu verhängen. 🙁
  • order" ist für Sie, wenn Sie zwei oder mehr bytes, die ein einzelnes Zeichen, und Sie müssen wissen, wie herum Sie sind, so können Sie Sie Lesen richtig. Windows-1252, ISO-8859-1, etc. sind alle single-byte-Codierungen, es ist nur ein byte pro Zeichen, so gibt es keine Notwendigkeit für eine Byte-Order-Mark zu sagen, die Art und Weise, Sie zu Lesen. Sie sind nicht gedacht, um festzustellen, welche Kodierung verwendet; Sie verwendet werden, da sonst keine automatische Möglichkeit, zu sagen. Aber Sie sind nicht zuverlässig für Sie. Stücklisten auf multibyte-Codierungen werden nicht in eine Microsoft-Sache, nur UTF8+BOM ist.
  • Tatsache 1: UTF-8 ist eine byte-orientierte Codierung übertragen im Netz bestellen, hat kein "byte-Reihenfolge", braucht kein "byte-Reihenfolge". Tatsache 2: windows-Verwendung von UCS-2, ganz ähnlich wie UTF-16, ist ein multi-byte-Codierung, für die Microsoft geben keine Stückliste. Holen Sie sich Ihren richtigen Fakten @TessellatingHeckler .
  • meine Fakten Recht?" Welche Tatsachen habe ich etwas falsch? Deine Fakten nicht widersprechen, was ich sagte.
  • Sie sind eine Einführung in die "byte order" - Konzept, nicht mich (meinen ersten Kommentar nicht Adresse). Aber UTF-8 benötigt keine byte-order-Erkennung oder die Beschreibung. Es ist gebildet durch eine Folge von bytes. So gibt es keine Notwendigkeit für eine Byte-Order-Mark in UTF-8. ... Zur Identifikation: UTF-8 die zuverlässigste Kodierung, um korrekt erkannt werden (bei der UNICODE-Codepoint über 128 verwendet werden) benötigt keine Stückliste. ... Wieder: Fakt-1: UTF-8 braucht keine "byte-Reihenfolge". Tatsache 2: Microsoft verwenden (angeblich) 2-byte-Kodierung ohne BOM, Warum ist BOM Bedarf in andere Codierungen? @TessellatingHeckler
  • utf-8 ist ein byte-stream, so, es ist wirklich nicht eine byte-Reihenfolge, aber in diesem Fall, die 3-byte-BOM fungiert als eine Unterschrift sowieso. Die Software sollte wissen, ob die Codierung ANSI oder utf-8. Im Falle von utf-8 Inhalten behandelt wird als ANSI-Codierung, die resultierenden Zeichen werden falsch sein, weil die Byte-Sequenzen behandelt werden, als wären Sie einzelne Zeichen, whiich ist falsch. Auf der anderen Seite, wenn die software behandelt ANSI-codierte Dateien als utf-8 es werden Fehler aufgrund von Defekten oder unvollständigen Sequenzen.
  • Sie argumentieren gegen Dinge, die ich nie sagte. Codierungen, die /Notwendigkeit/ einer Stückliste müssen Sie es /Sie sagen, die byte-Reihenfolge/. Codierungen, die nicht /brauchen/ BOM, brauchen Sie nicht zu sagen, Sie können die byte-Reihenfolge. UTF-8 hat eine optionale Stückliste in der spec, die missbraucht werden kann, um zu erkennen, Verwendung von UTF-8. Das ist nicht "das ändern der standard", das ist, warum es unterscheidet sich vom klassischen Zeichensätzen. Es geht nicht um die Erkennung der byte-Reihenfolge UTF-8, und ich habe nie gesagt, dass. SIE führte byte-Reihenfolge, wenn Sie sagte: "der (vermeintliche) Dienstprogramm zum hinzufügen eines BOM". Wo muss Microsoft die Verwendung von 2-byte/ohne BOM? DOTNet verwendet 2-byte - +Stückliste für ein Beispiel.

InformationsquelleAutor simple | 2010-02-08
Schreibe einen Kommentar