Unicode, Unicode Big Endian oder UTF-8? Was ist der Unterschied? Welches Format ist besser?

26574
Ashwin Nanjappa

Wenn ich versuche, eine Textdatei mit nicht-englischen Texten in Notepad zu speichern, kann ich zwischen Unicode, Unicode Big Endian und UTF-8 wählen . Was ist der Unterschied zwischen diesen Formaten?

Unter der Annahme, ich nicht jede Abwärtskompatibilität will (mit älteren OS - Versionen oder Apps) und ich nicht kümmere sich um die Dateigröße, die diese Formate ist besser?

(Nehmen Sie an, dass der Text zusätzlich zu anderen Sprachen in Sprachen wie Chinesisch oder Japanisch sein kann.)

Anmerkung: Aus den Antworten und Kommentaren unten scheint es, dass Unicode in Notepad-Sprache UTF-16 (Little Endian), Unicode Big Endian UTF-16 (Big Endian) und UTF-8 UTF-8 ist.

19
http://www.utf8everywhere.org/ phuclv vor 9 Jahren 2

6 Antworten auf die Frage

19
Jason Baker

Keine Ahnung. Was ist besser: eine Säge oder ein Hammer? :-)

Unicode ist nicht UTF

Es gibt ein bisschen in dem Artikel, der etwas relevanter für das vorliegende Thema ist:

  • UTF-8 konzentriert sich auf die Minimierung der Bytegröße für die Darstellung von Zeichen aus dem ASCII-Satz (Darstellung mit variabler Länge: Jedes Zeichen wird auf 1 bis 4 Bytes dargestellt, und ASCII-Zeichen passen alle auf 1 Byte). Wie Joel es sagt:

"Sehen Sie sich all diese Nullen an!", Sagten sie, da sie Amerikaner waren und sich englischen Text anschauten, der selten Codepunkte über U + 00FF verwendete. Sie waren auch liberale Hippies in Kalifornien, die konservieren wollten. Wenn sie Texaner wären, hätten sie nichts dagegen gehabt, doppelt so viele Bytes zu verschlingen. Diese kalifornischen Wimps konnten die Idee, den für Streicher benötigten Speicherplatz zu verdoppeln, nicht ertragen

  • UTF-32 konzentriert sich auf die Vollständigkeit und Darstellung mit fester Länge und verwendet 4 Byte für alle Zeichen. Dies ist die einfachste Übersetzung, bei der der Unicode-Codepunkt direkt auf 4 Byte abgebildet wird. Offensichtlich ist es nicht sehr größeneffizient.

  • UTF-16 ist ein Kompromiss, der meistens 2 Bytes verwendet, aber auf 2 * 2 Bytes pro Zeichen erweitert wird, um bestimmte Zeichen darzustellen, die nicht in der Basic Multilingual Plane (BMP) enthalten sind.

Siehe auch Das absolute Minimum, das jeder Softwareentwickler unbedingt und positiv über Unicode und Zeichensätze wissen muss (keine Ausreden!)

Das Problem rührt von der Tatsache her, dass Unicode eine Kodierung ist, jedoch nicht im Sinne von Zahlen in Bytes. UTF-8/16/32 sind alles Unicode-Kodierungen, aber Unicode selbst ist eine Zuordnung von Symbolen zu Zahlen. Sie hätten eine andere Terminologie verwenden können, um diese Verwirrung zu vermeiden, denke ich. jerryjvl vor 14 Jahren 4
Ungeachtet dessen, was das OP der Frage angeht, stehen die Chancen, dass die Anwendung 'UTF-16' bedeutet, wobei 'Unicode' steht. jerryjvl vor 14 Jahren 4
Ich bin nicht sicher, dass das Ziel von UTF-8 "Konservierung" im Gegensatz zur Rückwärtskompatibilität mit ASCII ist. Mr. Shiny and New 安宇 vor 14 Jahren 3
@Johannes: Das Unicode-Konsortium hat beschlossen, niemals Codepunkte über U + 10FFFF zu vergeben, da diese nicht in UTF-16 dargestellt werden können. Dies hatte zur Folge, dass UTF-8 auf 4 Bytes beschränkt wurde. user46971 vor 13 Jahren 0
"Unicode ist nicht UTF" - für viele ist es WTF;) mlvljr vor 11 Jahren 1
@ Jason, ist Joel wirklich wirklich rassistisch? Pacerier vor 6 Jahren 0
4
Mark Ransom

Für europäische Sprachen ist UTF-8 kleiner. Bei orientalischen Sprachen ist der Unterschied nicht so eindeutig.

Beide können mit allen möglichen Unicode-Zeichen umgehen, sodass die Kompatibilität keinen Unterschied macht.

3
Brad Gilbert

Es gibt mehr Unicode-Zeichenkodierungen, als Sie vielleicht denken.

  • UTF 8

    Die UTF-8-Kodierung ist variabel breit und reicht von 1 bis 4 Bytes, wobei die oberen Bits jedes Bytes als Steuerbits reserviert sind. Die führenden Bits des ersten Bytes geben die Gesamtanzahl der für dieses Zeichen verwendeten Bytes an. Der Skalarwert des Codepunkts eines Zeichens ist die Verkettung der Nichtsteuerungsbits. In dieser Tabelle steht xfür die niedrigsten 8 Bits des Unicode-Werts, yfür die nächst höheren 8 Bits und zfür die höheren Bits.

    Unicode Byte1 Byte2 Byte3 Byte4 U+0000-U+007F 0xxxxxxx  U+0080-U+07FF 110yyyxx 10xxxxxx  U+0800-U+FFFF 1110yyyy 10yyyyxx 10xxxxxx  U+10000-U+10FFFF 11110zzz 10zzyyyy 10yyyyxx 10xxxxxx 
  • UCS-16
  • UCS-16BE
  • UCS-16LE

  • UTF-16
  • UTF-16BE
  • UTF-16LE

  • UTF-32
  • UTF-32-BE
Es gibt mehr Unicode-Zeichenkodierungen, als Sie aufgelistet haben. Zum Beispiel [UTF-1] (https://en.wikipedia.org/wiki/UTF-1), [UTF-7] (https://en.wikipedia.org/wiki/UTF-7), [UTF -EBCDIC] (https://en.wikipedia.org/wiki/UTF-EBCDIC), [GB-18030] (https://en.wikipedia.org/wiki/GB_18030), [MIME] (https: // de.wikipedia.org/wiki/MIME), [UTF-9 und UTF-18] (https://en.wikipedia.org/wiki/UTF-9_and_UTF-18) ... Sie können auch ein beliebiges binäres Codierschema verwenden Unicode-Daten zu kodieren. Lesen Sie mehr [Vergleich von Unicode-Kodierungen] (https://en.wikipedia.org/wiki/Comparison_of_Unicode_encodings) phuclv vor 8 Jahren 1
1
John Saunders

"Unicode" ist ein weiterer Begriff für "UTF-16", bei dem der Unicode-Zeichensatz in 16 Bits pro Zeichen codiert wird. UTF-8 codiert es in acht Bits pro Zeichen.

In beiden Fällen wird jeder Überlauf weiteren 16 oder acht Bits zugeordnet.

Welcher ist dann besser? R. Martinho Fernandes vor 14 Jahren 0
"es hängt von der Situation ab. John Saunders vor 14 Jahren 0
Obwohl für diese spezielle Frage "Unicode" in der Tat als ein anderer Begriff für "UTF-16" missbraucht wird, ist dies im Allgemeinen nicht der Fall - siehe Jasons Antwort. Arjan vor 14 Jahren 0
Sie meinen "pro Codeeinheit", nicht "pro Zeichen"; Sowohl UTF-8 als auch UTF-16 können mehrere Codeeinheiten verwenden, um ein Zeichen darzustellen. Und "Unicode" und "UTF-16" sind NICHT dasselbe, außer in der Terminologie von Microsoft. user46971 vor 13 Jahren 1
1
zildjohn01

Der einzige wirkliche Vorteil bei kleinen Dateien wie Textdateien ist die resultierende Dateigröße. UTF-8 erzeugt im Allgemeinen kleinere Dateien. Bei chinesischem / japanischem Text ist dieser Unterschied jedoch möglicherweise weniger ausgeprägt.

Beachten Sie, dass es auch Unterschiede in der Netzwerkbandbreite und der Speicherauslastung gibt. Jason Baker vor 14 Jahren 0
"UTF-8 erzeugt im Allgemeinen kleinere Dateien": Nicht generell. UTF-8 erzeugt kleinere Dateien für ASCII-Dateien. Wenn eine Datei nur aus Unicode-Codepunkten über U + 0800 besteht, ist sie in UTF-8 * größer * als in UTF-16. sleske vor 14 Jahren 1
0
thuzhf

In einem Wort ist Unicode ein Zeichensatz, während Unicode Big Endian und utf-8 zwei Kodierungen sind, die zum Speichern von Zeichen als 01 auf einem Computer verwendet werden.

Und der Unterschied ist ...? David Richerby vor 8 Jahren 0