UTF-8, UTF-16 und UTF-32

487

Was sind die Unterschiede zwischen UTF-8, UTF-16 und UTF-32?

Ich verstehe, dass sie alle Unicode speichern und dass jedes eine andere Anzahl von Bytes verwendet, um ein Zeichen darzustellen. Gibt es einen Vorteil, wenn man sich für einen entscheidet?

Peter Mortensen
quelle
36
Sehen Sie sich dieses Video an, wenn Sie daran interessiert sind, wie Unicode funktioniert. Youtube.com/watch?v=MijmeoH9LT4
1
Das Video konzentriert sich auf UTF-8 und erklärt gut, wie die Codierung mit variabler Länge funktioniert und ist hauptsächlich mit Computern kompatibel, die nur ASCII mit fester Länge lesen oder schreiben. Unicode-Leute waren schlau beim Entwerfen der UTF-8-Codierung.
Minuten
1
Ich habe ein Online-Tool zum Konvertieren und Vergleichen erstellt.
Amit Kumar Gupta
1
UTF-8 ist der De-facto-Standard in modernster Software für gespeicherte Dateien . Insbesondere ist es die am häufigsten verwendete Codierung für HTML- und Konfigurations- und Übersetzungsdateien (Minecraft akzeptiert beispielsweise keine andere Codierung für alle Textinformationen). UTF-32 ist schnell für die Darstellung des internen Speichers , und UTF-16 ist veraltet und wird derzeit aus historischen Gründen nur in Win32 verwendet ( UTF-16 hatte eine feste Länge, als Windows 95 eine Sache war)
Kotauskas
@VladislavToncharov UTF-16 war nie eine Codierung mit fester Länge. Sie verwechseln es mit UCS-2.

Antworten:

373

UTF-8 hat den Vorteil, dass ASCII-Zeichen die Mehrheit der Zeichen in einem Textblock darstellen, da UTF-8 diese in 8 Bit codiert (wie ASCII). Es ist auch insofern vorteilhaft, als eine UTF-8-Datei, die nur ASCII-Zeichen enthält, dieselbe Codierung wie eine ASCII-Datei hat.

UTF-16 ist besser, wenn ASCII nicht vorherrscht, da hauptsächlich 2 Bytes pro Zeichen verwendet werden. UTF-8 beginnt, 3 oder mehr Bytes für die Zeichen höherer Ordnung zu verwenden, wobei UTF-16 für die meisten Zeichen bei nur 2 Bytes bleibt.

UTF-32 deckt alle möglichen Zeichen in 4 Bytes ab. Das macht es ziemlich aufgebläht. Ich kann mir keinen Vorteil vorstellen, es zu benutzen.

AnthonyWJones
quelle
165
UTF-32-Vorteil: Sie müssen gespeicherte Daten nicht in den 32-Bit-Unicode-Codepunkt dekodieren, z. B. Zeichen für Zeichen. Der Codepunkt ist bereits direkt in Ihrem Array / Vektor / String verfügbar.
Richq
22
Es ist auch einfacher zu analysieren, wenn (der Himmel hilft Ihnen) Sie das Rad neu implementieren müssen.
Paul McMillan
24
Nun, UTF-8 hat einen Vorteil bei Netzwerkübertragungen - Sie müssen sich keine Gedanken über die Endianness machen, da Sie Daten byteweise übertragen (im Gegensatz zu 4).
Tim
30
@richq In UTF-32 können Sie nicht zeichenweise behandelt werden, da der Codepunkt nicht immer einem Zeichen entspricht.
Hamstergen
4
UTF-32-Vorteil: Die String-Manipulation ist möglicherweise schneller als das Utf-8-Äquivalent
Wes
332

Zusamenfassend:

  • UTF-8: Codierung mit variabler Breite, abwärtskompatibel mit ASCII. ASCII-Zeichen (U + 0000 bis U + 007F) benötigen 1 Byte, Codepunkte U + 0080 bis U + 07FF 2 Byte, Codepunkte U + 0800 bis U + FFFF 3 Byte, Codepunkte U + 10000 bis U + 10FFFF nimm 4 Bytes. Gut für englischen Text, nicht so gut für asiatischen Text.
  • UTF-16: Codierung mit variabler Breite. Die Codepunkte U + 0000 bis U + FFFF benötigen 2 Bytes, die Codepunkte U + 10000 bis U + 10FFFF 4 Bytes. Schlecht für englischen Text, gut für asiatischen Text.
  • UTF-32: Codierung mit fester Breite. Alle Codepunkte benötigen vier Bytes. Ein riesiges Gedächtnisfresser, aber schnell zu bedienen. Selten genutzt.

Lang: siehe Wikipedia: UTF-8 , UTF-16 und UTF-32 .

Adam Rosenfield
quelle
65
@spurrymoses: Ich beziehe mich ausschließlich auf den Speicherplatz, den die Datenbytes belegen. UTF-8 benötigt 3 Bytes pro asiatischem Zeichen, während UTF-16 nur 2 Bytes pro asiatischem Zeichen benötigt. Dies ist wirklich kein großes Problem, da Computer heutzutage im Vergleich zur durchschnittlichen Textmenge, die im Speicher eines Programms gespeichert ist, über eine Menge Speicher verfügen.
Adam Rosenfield
12
UTF-32 wird nicht mehr selten verwendet ... unter OSX und Linux wird wchar_tstandardmäßig 4 Byte verwendet. gcc hat eine Option -fshort-wchar, die die Größe auf 2 Bytes reduziert, aber die Binärkompatibilität mit std libs unterbricht.
Vine'th
9
@PandaWood ofcource UTF-8 kann jedes Zeichen codieren! Aber haben Sie den Speicherbedarf mit dem für UTF-16 verglichen? Sie scheinen den Punkt zu verfehlen!
Ustaman Sangat
16
Wenn jemand sagen würde, UTF-8 sei "nicht so gut für asiatischen Text" im Kontext aller Codierungsformate, einschließlich derer, die Unicode nicht codieren können, wären sie natürlich falsch. Das ist aber nicht der Kontext. Der Kontext der Speicheranforderungen ergibt sich aus der Tatsache, dass die Frage (und Antwort) UTF-8, UTF-16 und UTF-32 vergleicht, die alle asiatischen Text codieren, jedoch unterschiedliche Speicher- / Speichermengen verwenden. Daraus folgt, dass ihre relative Güte natürlich vollständig im Zusammenhang mit den Speicheranforderungen steht. "Nicht so gut"! = "Nicht gut".
Paul Gregory
5
@ McGafter: Na klar gibt es. Wenn Sie Vertrauenswürdigkeit wünschen, gehen Sie direkt zum Maul des Pferdes im Unicode-Konsortium . In Kapitel 2.5 finden Sie eine Beschreibung der UTF- * -Codierungen. Um ein einfaches Verständnis der Kodierungen auf hoher Ebene zu erhalten, sind die Wikipedia-Artikel meiner Meinung nach eine viel zugänglichere Quelle.
Adam Rosenfield
116
  • UTF-8 ist eine Variable von 1 bis 4 Bytes.

  • UTF-16 ist eine Variable von 2 oder 4 Bytes.

  • UTF-32 ist fest auf 4 Bytes eingestellt.

Hinweis: UTF-8 kann mit der neuesten Konvention 1 bis 6 Byte benötigen: https://lists.gnu.org/archive/html/help-flex/2005-01/msg00030.html

Quassnoi
quelle
35
UTF8 ist tatsächlich 1 bis 6 Bytes.
Urkle
6
@Urkle ist technisch korrekt, da die Zuordnung des gesamten UTF32 / LE / BE-Bereichs U-00200000 - U-7FFFFFFF umfasst, obwohl Unicode v6.3 einschließlich U-0010FFFF endet. Hier ist eine schöne Aufschlüsselung, wie zu enc / dec 5 und 6 Byte UTF - 8: lists.gnu.org/archive/html/help-flex/2005-01/msg00030.html
4
diese mit relevanten Referenzteilen und deren Quellen sichern?
n611x007
20
@Urkle Nein, UTF-8 darf nicht 5 oder 6 Byte lang sein. Unicode-Codepunkte sind auf 21 Bit begrenzt, wodurch UTF-8 auf 4 Byte begrenzt wird. (Sie könnten natürlich das Prinzip von UTF-8 erweitern, um beliebig große Ganzzahlen zu codieren, aber es wäre kein Unicode.) Siehe RFC 3629.
rdb
11
Zitieren von Wikipedia: Im November 2003 wurde UTF-8 durch RFC 3629 eingeschränkt, um den Einschränkungen der UTF-16-Zeichencodierung zu entsprechen: Das explizite Verbot von Codepunkten, die den hohen und niedrigen Ersatzzeichen entsprechen, entfernte mehr als 3% der Drei-Byte-Sequenzen und das Ende bei U + 10FFFF entfernte mehr als 48% der Vier-Byte-Sequenzen und aller Fünf- und Sechs-Byte-Sequenzen.
Adam Calvet Bohl
79

Unicode definiert einen einzelnen großen Zeichensatz, der jedem grafischen Symbol einen eindeutigen ganzzahligen Wert zuweist (dies ist eine wesentliche Vereinfachung und nicht wirklich wahr, aber für die Zwecke dieser Frage nah genug). UTF-8/16/32 sind einfach verschiedene Möglichkeiten, dies zu codieren.

Kurz gesagt, UTF-32 verwendet 32-Bit-Werte für jedes Zeichen. Dadurch können sie für jedes Zeichen einen Code mit fester Breite verwenden.

UTF-16 verwendet standardmäßig 16-Bit, aber das gibt Ihnen nur 65.000 mögliche Zeichen, was für den vollständigen Unicode-Satz bei weitem nicht ausreicht. Einige Zeichen verwenden daher Paare von 16-Bit-Werten.

Und UTF-8 verwendet standardmäßig 8-Bit-Werte, was bedeutet, dass die ersten 127 Werte Einzelbyte-Zeichen mit fester Breite sind (das höchstwertige Bit wird verwendet, um anzuzeigen, dass dies der Beginn einer Mehrbyte-Sequenz ist, wobei 7 übrig bleibt Bits für den tatsächlichen Zeichenwert). Alle anderen Zeichen werden als Sequenzen von bis zu 4 Bytes codiert (sofern Speicher vorhanden ist).

Und das führt uns zu den Vorteilen. Jedes ASCII-Zeichen ist direkt mit UTF-8 kompatibel. Für die Aktualisierung älterer Apps ist UTF-8 daher eine häufige und offensichtliche Wahl. In fast allen Fällen wird auch der geringste Speicher verwendet. Auf der anderen Seite können Sie keine Garantie für die Breite eines Zeichens geben. Es kann 1, 2, 3 oder 4 Zeichen breit sein, was die Manipulation von Zeichenfolgen schwierig macht.

UTF-32 ist das Gegenteil, es verwendet den meisten Speicher (jedes Zeichen hat eine feste Breite von 4 Byte), aber andererseits wissen Sie , dass jedes Zeichen genau diese Länge hat, sodass die Manipulation von Zeichenfolgen viel einfacher wird. Sie können die Anzahl der Zeichen in einer Zeichenfolge einfach aus der Länge der Zeichenfolge in Byte berechnen. Mit UTF-8 geht das nicht.

UTF-16 ist ein Kompromiss. Damit können die meisten Zeichen in einen 16-Bit-Wert mit fester Breite passen. Solange Sie keine chinesischen Symbole, Noten oder andere haben, können Sie davon ausgehen, dass jedes Zeichen 16 Bit breit ist. Es benötigt weniger Speicher als UTF-32. Aber es ist in gewisser Weise "das Schlimmste aus beiden Welten". Es verwendet fast immer mehr Speicher als UTF-8 und vermeidet immer noch nicht das Problem, das UTF-8 (Zeichen variabler Länge) plagt.

Schließlich ist es oft hilfreich, nur das zu wählen, was die Plattform unterstützt. Windows verwendet UTF-16 intern, daher ist dies unter Windows die naheliegende Wahl.

Linux variiert ein wenig, aber sie verwenden UTF-8 im Allgemeinen für alles, was Unicode-kompatibel ist.

So kurze Antwort: Alle drei Codierungen können denselben Zeichensatz codieren, aber sie repräsentieren jedes Zeichen als unterschiedliche Byte-Sequenzen.

jalf
quelle
12
Es ist ungenau zu sagen, dass Unicode jedem grafischen Symbol eine eindeutige Ganzzahl zuweist . Diesem Codepunkt wird dies zugewiesen, aber einige Codepunkte sind unsichtbare Steuerzeichen , und einige grafische Symbole erfordern mehrere Codepunkte zur Darstellung.
Tchrist
15
@tchrist: Ja, es ist ungenau. Das Problem ist, dass Sie Tausende von Seiten schreiben müssen, um Unicode genau zu erklären. Ich hoffte, das Grundkonzept zu vermitteln, um den Unterschied zwischen den Kodierungen zu erklären
Jalf
@ Jalf lol richtig, also im Grunde, um Unicode zu erklären, müssten Sie die Unicode-
Justin Ohms
@tchrist Genauer gesagt, Sie können chinesische Symbole aus bereitgestellten Grundelementen erstellen (diese befinden sich jedoch im selben Diagramm, sodass Sie nur unwirklich viel Speicherplatz - entweder Festplatte oder RAM - zum Codieren verwenden), anstatt das zu verwenden eingebaute.
Kotauskas
44

Unicode ist ein Standard und über UTF-x können Sie als technische Implementierung für einige praktische Zwecke denken:

  • UTF-8 - " Größe optimiert ": Am besten geeignet für lateinische zeichenbasierte Daten (oder ASCII). Es wird nur 1 Byte pro Zeichen benötigt, aber die Größe wächst entsprechend der Symbolvielfalt (und kann im schlimmsten Fall bis zu 6 Byte pro Zeichen betragen).
  • UTF-16 - " balance ": Es werden mindestens 2 Bytes pro Zeichen benötigt, was für vorhandene Mainstream-Sprachen mit fester Größe ausreicht, um die Zeichenbehandlung zu vereinfachen (die Größe ist jedoch weiterhin variabel und kann bis zu 4 Bytes pro Zeichen betragen )
  • UTF-32 - " Leistung ": Ermöglicht die Verwendung einfacher Algorithmen als Ergebnis von Zeichen fester Größe (4 Bytes), jedoch mit Speichernachteil
Turm
quelle
«Mainstream-Sprachen» nicht so Mainstream in vielen Teilen der Welt ^^
tuxayo
2
UTF-16 ist tatsächlich größenoptimiert für Nicht-ASCII-Zeichen. Denn es kommt wirklich darauf an, mit welchen Sprachen es verwendet wird.
Smoking
@tuxayo stimme voll und ganz zu, es lohnt sich, Sätze von Hanzi- und Kanji-Charakteren für den asiatischen Teil der Welt zu erwähnen.
Turm
Sollte die beste Antwort sein. Dies ist zu richtig, um hier begraben zu werden.
Michal Štein
28

Ich habe versucht, in meinem Blogpost eine einfache Erklärung zu geben .

UTF-32

benötigt 32 Bit (4 Bytes), um ein beliebiges Zeichen zu codieren . Um beispielsweise den Codepunkt "A" mit diesem Schema darzustellen, müssen Sie 65 in eine 32-Bit-Binärzahl schreiben:

00000000 00000000 00000000 01000001 (Big Endian)

Wenn Sie genauer hinschauen, werden Sie feststellen, dass die am weitesten rechts liegenden sieben Bits bei Verwendung des ASCII-Schemas tatsächlich dieselben Bits sind. Da UTF-32 jedoch ein Schema mit fester Breite ist , müssen drei zusätzliche Bytes angehängt werden. Das heißt, wenn wir zwei Dateien haben, die nur das "A" -Zeichen enthalten, eine ASCII-codiert und die andere UTF-32-codiert ist, beträgt ihre Größe entsprechend 1 Byte und 4 Byte.

UTF-16

Viele Leute denken, dass UTF-32 eine feste Breite von 16 Bit verwendet, da UTF-32 eine feste Breite von 32 Bit verwendet, um einen Codepunkt darzustellen. FALSCH!

In UTF-16 kann der Codepunkt entweder in 16 Bit oder in 32 Bit dargestellt werden. Dieses Schema ist also ein Codierungssystem mit variabler Länge. Was ist der Vorteil gegenüber dem UTF-32? Zumindest für ASCII ist die Größe der Dateien nicht viermal so groß wie das Original (aber immer noch zweimal), sodass wir immer noch nicht abwärtskompatibel mit ASCII sind.

Da 7-Bit ausreichen, um das "A" -Zeichen darzustellen, können wir jetzt 2 Bytes anstelle von 4 wie beim UTF-32 verwenden. Es wird so aussehen:

00000000 01000001

UTF-8

Sie haben richtig geraten. In UTF-8 kann der Codepunkt entweder mit 32, 16, 24 oder 8 Bit dargestellt werden, und als UTF-16-System ist dieses auch ein Codierungssystem mit variabler Länge.

Schließlich können wir "A" genauso darstellen, wie wir es mit dem ASCII-Codierungssystem darstellen:

01001101

Ein kleines Beispiel, bei dem UTF-16 tatsächlich besser ist als UTF-8:

Betrachten Sie den chinesischen Buchstaben "語" - seine UTF-8-Codierung lautet:

11101000 10101010 10011110

Während die UTF-16-Codierung kürzer ist:

10001010 10011110

Um die Darstellung und ihre Interpretation zu verstehen, besuchen Sie den Originalbeitrag.

Maroun
quelle
19

UTF-8

  • hat kein Konzept der Bytereihenfolge
  • verwendet zwischen 1 und 4 Bytes pro Zeichen
  • ASCII ist eine kompatible Teilmenge der Codierung
  • Eine vollständige Selbstsynchronisierung, z. B. ein verworfenes Byte von einer beliebigen Stelle in einem Stream, beschädigt höchstens ein einzelnes Zeichen
  • Nahezu alle europäischen Sprachen sind in zwei Bytes oder weniger pro Zeichen codiert

UTF-16

  • muss mit bekannter Bytereihenfolge analysiert werden oder eine Bytereihenfolge (BOM) lesen
  • verwendet entweder 2 oder 4 Bytes pro Zeichen

UTF-32

  • Jedes Zeichen besteht aus 4 Bytes
  • muss mit bekannter Bytereihenfolge analysiert werden oder eine Bytereihenfolge (BOM) lesen

UTF-8 wird am platzsparendsten sein, es sei denn, ein Großteil der Zeichen stammt aus dem CJK-Zeichenbereich (Chinesisch, Japanisch und Koreanisch).

UTF-32 eignet sich am besten für den wahlfreien Zugriff durch Zeichenversatz in ein Byte-Array.

Jeff Adamson
quelle
Wie funktioniert die "Selbstsynchronisierung" in UTF-8? Können Sie Beispiele für 1-Byte- und 2-Byte-Zeichen geben?
Koray Tugay
2
@KorayTugay Gültige kürzere Byte-Zeichenfolgen werden niemals in längeren Zeichen verwendet. Beispielsweise liegt ASCII im Bereich von 0 bis 127, was bedeutet, dass alle Ein-Byte-Zeichen die Form 0xxxxxxxin Binärform haben. Alle Zwei-Byte-Zeichen beginnen 110xxxxxmit einem zweiten Byte von 10xxxxxx. Nehmen wir also an, das erste Zeichen eines Zwei-Byte-Zeichens geht verloren. Sobald Sie 10xxxxxxohne Vorgänger sehen 110xxxxxx, können Sie sicher sein, dass ein Byte verloren gegangen oder beschädigt ist, dieses Zeichen verwerfen (oder es erneut von einem Server oder was auch immer anfordern) und fortfahren, bis Sie wieder ein gültiges erstes Byte sehen .
Chris
1
Wenn Sie den Versatz zu einem Zeichen haben, haben Sie den Versatz zu diesem Zeichen - utf8, utf16 oder utf32 funktionieren in diesem Fall genauso. dh sie sind alle gleich gut beim Direktzugriff durch Zeichenversatz in ein Byte-Array. Die Idee, dass utf32 Zeichen besser zählen kann als utf8, ist ebenfalls völlig falsch. Ein Codepunkt (der nicht mit einem Zeichen identisch ist, der wiederum nicht mit einem Graphem identisch ist .. seufz) ist in utf32 32 Bit breit und in utf8 zwischen 8 und 32 Bit, aber ein Zeichen kann mehrere Codepunkte umfassen, die zerstört den großen Vorteil, den die Leute behaupten, utf32 habe gegenüber utf8.
Klarer
14

Ich habe einige Tests durchgeführt, um die Datenbankleistung zwischen UTF-8 und UTF-16 in MySQL zu vergleichen.

Geschwindigkeiten aktualisieren

UTF-8

Geben Sie hier die Bildbeschreibung ein

UTF-16

Geben Sie hier die Bildbeschreibung ein

Geschwindigkeiten einfügen

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Geschwindigkeiten löschen

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Farid Movsumov
quelle
14

In UTF-32 sind alle Zeichen mit 32 Bit codiert. Der Vorteil ist, dass Sie die Länge der Zeichenfolge leicht berechnen können. Der Nachteil ist, dass Sie für jedes ASCII-Zeichen zusätzliche drei Bytes verschwenden.

In UTF-8-Zeichen mit variabler Länge werden ASCII-Zeichen in einem Byte (acht Bit) codiert, die meisten westlichen Sonderzeichen werden entweder in zwei Bytes oder drei Bytes (z. B. € drei Bytes) codiert und es können exotischere Zeichen verwendet werden auf vier Bytes. Ein klarer Nachteil ist, dass Sie die Länge der Zeichenfolge a priori nicht berechnen können. Im Vergleich zu UTF-32 sind jedoch viel weniger Bytes erforderlich, um lateinischen (englischen) Alphabettext zu codieren.

UTF-16 ist auch variabel lang. Zeichen werden entweder in zwei oder vier Bytes codiert. Ich verstehe den Punkt wirklich nicht. Es hat den Nachteil, dass es eine variable Länge hat, hat aber nicht den Vorteil, dass es so viel Platz spart wie UTF-8.

Von diesen dreien ist UTF-8 eindeutig am weitesten verbreitet.

vartec
quelle
Warum sollte ich die Länge der Zeichenfolge beim Entwickeln von Websites berechnen wollen? Gibt es einen Vorteil bei der Auswahl von UTF-8 / UTF-16 in der Webentwicklung?
Morfidon
"Der Vorteil ist, dass Sie die Länge der Zeichenfolge einfach berechnen können." Wenn Sie die Länge durch die Anzahl der Codepunkte definieren, können Sie die Bytelänge einfach durch 4 teilen, um sie mit UTF-32 zu erhalten. Dies ist jedoch keine sehr nützliche Definition: Sie bezieht sich möglicherweise nicht auf die Anzahl der Zeichen. Durch die Normalisierung kann auch die Anzahl der Codepunkte in der Zeichenfolge geändert werden. Zum Beispiel kann das französische Wort "été" auf mindestens 4 verschiedene Arten mit 3 verschiedenen Codepunktlängen codiert werden.
UTF-16 ist möglicherweise schneller als UTF-8, während auch kein Speicher wie UTF-32 verschwendet wird.
Michal Štein
6

Abhängig von Ihrer Entwicklungsumgebung haben Sie möglicherweise nicht einmal die Wahl, welche Codierung Ihres String-Datentyps intern verwendet wird.

Aber zum Speichern und Austauschen von Daten würde ich immer UTF-8 verwenden, wenn Sie die Wahl haben. Wenn Sie hauptsächlich über ASCII-Daten verfügen, erhalten Sie die kleinste zu übertragende Datenmenge, während Sie dennoch alles codieren können. Die Optimierung auf die geringste E / A ist der Weg zu modernen Maschinen.

mghie
quelle
Viel wichtiger als der Platzbedarf ist wohl die Tatsache, dass UTF-8 immun gegen Endianness ist. UTF-16 und UTF-32 müssen sich unweigerlich mit Endianness-Problemen befassen, bei denen UTF-8 einfach ein Strom von Oktetten ist.
Unsichtbarer
2

Wie bereits erwähnt, besteht der Unterschied hauptsächlich in der Größe der zugrunde liegenden Variablen, die jeweils größer werden, damit mehr Zeichen dargestellt werden können.

Schriftarten, Codierungen und Dinge sind jedoch (unnötig?) Unglaublich kompliziert, sodass ein großer Link erforderlich ist, um mehr Details zu erhalten:

http://www.cs.tut.fi/~jkorpela/chars.html#ascii

Erwarten Sie nicht, alles zu verstehen, aber wenn Sie später keine Probleme haben möchten, lohnt es sich, so viel wie möglich zu lernen, so früh wie möglich (oder einfach jemanden zu beauftragen, es für Sie zu klären).

Paul.

Paul W. Homer
quelle
Oder verwenden Sie einfach UTF-8 als Standard, da es zum De-facto-Standard geworden ist, und finden Sie heraus, ob ein neues System dies unterstützt oder nicht. Wenn dies nicht der Fall ist, können Sie zu diesem Beitrag zurückkehren.
Robotik
-2

Kurz gesagt, der einzige Grund für die Verwendung von UTF-16 oder UTF-32 ist die Unterstützung von nicht englischen bzw. alten Skripten.

Ich habe mich gefragt, warum sich jemand für eine Nicht-UTF-8-Codierung entschieden hat, wenn diese für Web- / Programmierzwecke offensichtlich effizienter ist.

Ein häufiges Missverständnis - die angehängte Nummer ist KEIN Hinweis auf ihre Fähigkeit. Sie alle unterstützen den vollständigen Unicode, nur dass UTF-8 ASCII mit einem einzigen Byte verarbeiten kann und somit effizienter / weniger korrupt für die CPU und das Internet ist.

Einige gute Lektüre: http://www.personal.psu.edu/ejp10/blogs/gotunicode/2007/10/which_utf_do_i_use.html und http://utf8everywhere.org

Killjoy
quelle
Ich bin mir nicht sicher, warum Sie vorschlagen, dass die Verwendung von UTF-16 oder UTF-32 nicht englischen Text unterstützen sollte. UTF-8 kann damit gut umgehen. Auch im englischen Text gibt es Nicht-ASCII-Zeichen. Wie ein Nicht-Joiner mit einer Breite von Null. Oder ein Schuss. Ich fürchte, diese Antwort bringt nicht viel Wert.
Unsichtbarer
Diese Frage haftet , weil Downvoting UTF-8 noch in HTML häufig verwendet wird , Dateien , auch wenn die Mehrheit der Charaktere sind 3-Byte - Zeichen in UTF-8,
Ṃųỻịgǻňạcểơửṩ
@ IInspectable Support ist nicht die beste Formulierung, Förderung oder bessere Unterstützung wäre genauer
Robotik
Das Senden einer Seite wie utf8everywhere.org ist nicht das, was ich in einer SO-Antwort tun würde.
Michal Štein