Was ist der Unterschied zwischen UTF-8 und ISO-8859-1 ?
utf-8
character-encoding
iso-8859-1
Jagadesh
quelle
quelle
Wikipedia erklärt beide ziemlich gut: UTF-8 gegen Latin-1 (ISO-8859-1). Ersteres ist eine Codierung mit variabler Länge, letzteres eine Einzelbyte-Codierung mit fester Länge. Latin-1 codiert nur die ersten 256 Codepunkte des Unicode-Zeichensatzes, während UTF-8 zum Codieren aller Codepunkte verwendet werden kann. Auf der Ebene der physischen Codierung werden nur die Codepunkte 0 bis 127 identisch codiert. Die Codepunkte 128 - 255 unterscheiden sich dadurch, dass sie mit UTF-8 zu einer 2-Byte-Sequenz werden, während sie mit Latin-1 Einzelbytes sind.
quelle
UTF
UTF ist eine Familie von Multi-Byte-Codierungsschemata, die Unicode- Codepunkte darstellen können, die für bis zu 2 ^ 31 [ungefähr 2 Milliarden] Zeichen repräsentativ sein können. UTF-8 ist ein flexibles Codierungssystem, das zwischen 1 und 4 Byte verwendet, um die ersten 2 ^ 21 [ungefähr 2 Millionen] Codepunkte darzustellen.
Lange Rede, kurzer Sinn: Jedes Zeichen mit einer Codepunkt- / Ordnungsdarstellung unter 127, auch bekannt als 7-Bit-sicheres ASCII, wird durch dieselbe 1-Byte-Sequenz wie die meisten anderen Einzelbyte-Codierungen dargestellt. Jedes Zeichen mit einem Codepunkt über 127 wird durch eine Folge von zwei oder mehr Bytes dargestellt, wobei die Einzelheiten der Codierung hier am besten erläutert werden .
ISO-8859
ISO-8859 ist eine Familie von Single-Byte - Codierschemata verwendet Alphabete repräsentieren, die im Bereich von 127 bis 255. Diese verschiedenen Alphabeten dargestellt werden können , werden definiert als „Teile“ in dem Format ISO-8859- n , die bekanntesten Dies sind wahrscheinlich ISO-8859-1, auch bekannt als "Latin-1". Wie bei UTF-8 bleibt 7-Bit-sicheres ASCII unabhängig von der verwendeten Codierungsfamilie unberührt.
Der Nachteil dieses Codierungsschemas ist seine Unfähigkeit, Sprachen mit mehr als 128 Symbolen aufzunehmen oder mehr als eine Familie von Symbolen gleichzeitig sicher anzuzeigen. Auch ISO-8859-Codierungen sind mit dem Aufstieg von UTF in Ungnade gefallen. Die dafür zuständige ISO-Arbeitsgruppe hat sich 2004 aufgelöst und die Wartung ihrem übergeordneten Unterausschuss überlassen.
quelle
ASCII: 7 Bits. 128 Codepunkte.
ISO-8859-1: 8 Bit. 256 Codepunkte.
UTF-8: 8-32 Bits (1-4 Bytes). 1.112.064 Codepunkte.
Sowohl ISO-8859-1 als auch UTF-8 sind abwärtskompatibel mit ASCII, aber UTF-8 ist nicht abwärtskompatibel mit ISO-8859-1:
Ausgabe:
quelle
ISO-8859-1 ist ein Legacy-Standard aus den 1980er Jahren. Es kann nur 256 Zeichen darstellen und ist daher nur für einige Sprachen in der westlichen Welt geeignet. Selbst für viele unterstützte Sprachen fehlen einige Zeichen. Wenn Sie eine Textdatei in dieser Codierung erstellen und versuchen, einige chinesische Zeichen zu kopieren / einzufügen, werden Sie seltsame Ergebnisse sehen. Mit anderen Worten, benutze es nicht. Unicode hat die Welt erobert und UTF-8 ist heutzutage so ziemlich der Standard, es sei denn, Sie haben einige alte Gründe (wie HTTP-Header, die mit allem kompatibel sein müssen).
quelle
Aus einer anderen Perspektive
0xc0
scheinen Dateien, die sowohl Unicode- als auch ASCII-Codierungen nicht lesen können, weil sie ein Byte enthalten , von ISO-8859-1 richtig gelesen zu werden. Die Einschränkung ist, dass die Datei natürlich keine Unicode-Zeichen enthalten sollte.quelle
Eine weitere wichtige Sache zu beachten: Wenn Sie sehen
iso-8859-1
, bezieht es sich wahrscheinlich eher auf Windows-1252 als auf ISO / IEC 8859-1 . Sie unterscheiden sich im Bereich 0x80–0x9F, wobei ISO 8859-1 die C1-Steuercodes enthält und Windows-1252 stattdessen nützliche sichtbare Zeichen enthält.Beispielsweise hat ISO 8859-1 0x85 als Steuerzeichen (in Unicode U + 0085, ``), während Windows-1252 eine horizontale Ellipse hat (in Unicode U + 2026 HORIZONTAL ELLIPSIS
…
).Die WHATWG-Codierungsspezifikation (wie sie von HTML verwendet wird) erklärt ausdrücklich
iso-8859-1
, dass sie eine Bezeichnung für istwindows-1252
, und Webbrowser unterstützen ISO 8859-1 in keiner Weise: Die HTML-Spezifikation besagt, dass alle Codierungen in der Codierungsspezifikation unterstützt werden müssen und nicht mehr .Von Interesse ist auch, dass numerische HTML-Zeichenreferenzen Windows-1252 im Wesentlichen für 8-Bit-Werte anstelle von Unicode-Codepunkten verwenden. pro https://html.spec.whatwg.org/#numeric-character-reference-end-state ,
…
wird U + 2026 statt U + 0085 produzieren.quelle
Mein Grund für die Untersuchung dieser Frage war aus der Perspektive, inwiefern sie kompatibel sind. Der Latin1-Zeichensatz (iso-8859) ist zu 100% kompatibel und kann in einem utf8-Datenspeicher gespeichert werden. Alle ASCII- und Extended-ASCII-Zeichen werden als Einzelbyte gespeichert.
Wenn Sie in die andere Richtung gehen, kann der Zeichensatz von utf8 zu Latin1 funktionieren oder auch nicht. Wenn 2-Byte-Zeichen vorhanden sind (Zeichen jenseits von Extended-ASCII 255), werden diese nicht in einem Latin1-Datenspeicher gespeichert.
quelle