Was ist der Unterschied zwischen UTF-8 y ISO-8859-1 ?
Es ist zu beachten, dass ASCII nur von 0 bis 127 reicht. Das MSB ist immer 0.
Was ist der Unterschied zwischen UTF-8 y ISO-8859-1 ?
Wenn Codepunkte über 127 definiert sind, ist das Kodierungssystem eine Version von Extended ASCII.
@RohanBhale Verwenden Sie nicht den Ausdruck "Extended ASCII", das würde nur Verwirrung stiften.
Wikipedia erklärt beides recht gut: UTF-8 gegen Latein-1 (ISO-8859-1). Erstere ist eine Kodierung mit variabler Länge, letztere eine Ein-Byte-Kodierung mit fester Länge. Latin-1 kodiert nur die ersten 256 Codepunkte des Unicode-Zeichensatzes, während UTF-8 zur Kodierung aller Codepunkte verwendet werden kann. Auf der Ebene der physikalischen Kodierung werden nur die Codepunkte 0 - 127 identisch kodiert; die Codepunkte 128 - 255 unterscheiden sich dadurch, dass sie bei UTF-8 zu einer 2-Byte-Sequenz werden, während sie bei Latin-1 aus einzelnen Bytes bestehen.
@mu Vielleicht war meine Aussage zweideutig, aber sie ist nicht falsch - ich sprach nicht von kodierten Bytefolgen, sondern von kodierten Zeichensätzen; das heißt, dass ISO-8859-1 zur Kodierung der ersten 256 Codepunkte des Unicode-Zeichensatzes verwendet wird.
UTF ist eine Familie von Multi-Byte-Codierungsverfahren, die Folgendes darstellen können Unicode Codepunkte, die für bis zu 2^31 [etwa 2 Milliarden] Zeichen stehen können. UTF-8 ist ein flexibles Kodierungssystem, das zwischen 1 und 4 Byte verwendet, um die ersten 2^21 [etwa 2 Millionen] Codepunkte darzustellen.
Langer Rede kurzer Sinn: Jedes Zeichen mit einem Codepunkt/einer ordinalen Darstellung unter 127, auch bekannt als 7-Bit-sicheres ASCII, wird durch dieselbe 1-Byte-Sequenz dargestellt wie die meisten anderen Ein-Byte-Kodierungen. Jedes Zeichen mit einem Codepunkt über 127 wird durch eine Folge von zwei oder mehr Bytes dargestellt, wobei die Besonderheiten der Kodierung am besten erklärt werden aquí .
ISO-8859 ist eine Familie von Ein-Byte-Kodierungsschemata, die zur Darstellung von Alphabeten verwendet werden, die im Bereich von 127 bis 255 dargestellt werden können. Diese verschiedenen Alphabete sind als "Teile" im Format ISO-8859- definiert. n Die bekanntesten davon dürften sein ISO-8859-1 alias 'Latin-1'. Wie bei UTF-8 bleibt das 7-Bit-sichere ASCII unabhängig von der verwendeten Kodierungsfamilie unberührt.
Der Nachteil dieses Kodierungsschemas ist, dass es nicht in der Lage ist, Sprachen mit mehr als 128 Symbolen unterzubringen oder mehr als eine Symbolfamilie gleichzeitig darzustellen. Außerdem ist die ISO-8859-Kodierung mit dem Aufkommen von UTF in Ungnade gefallen. Die dafür zuständige ISO-"Arbeitsgruppe" hat sich 2004 aufgelöst und die Pflege dem übergeordneten Unterausschuss überlassen.
Es ist erwähnenswert, dass Microsoft auch die eine Reihe von Zeichenkodierungen con begrenzt Kompatibilität mit ISO-8859, gewöhnlich als "cp####" bezeichnet. MS scheint darauf zu drängen, ihre neueren Produktversionen in der einen oder anderen Form auf Unicode umzustellen, aber aus Gründen der Altlasten und/oder der Interoperabilität werden Sie wahrscheinlich immer noch auf sie stoßen.
Zum Beispiel, cp1252 ist eine Obermenge der ISO-8859-1, die zusätzliche druckbare Zeichen im 0x80-0x9F
Bereich, insbesondere das Euro-Symbol €
und die viel geschmähten "intelligenten Zitate" “”
. Dies führt häufig zu einer Fehlanpassung, bei der 8859-1 problemlos als 1252 angezeigt werden kann, während 1252 möglicherweise scheinen problemlos als 8859-1 angezeigt, verhält sich aber falsch, wenn eines dieser zusätzlichen Symbole auftaucht.
Abgesehen von cp1252 ist das türkische cp1254 eine ähnliche Obermenge von ISO-8859-9, aber alle anderen Windows Code Pages weisen zumindest einige grundlegende Konflikte auf, wenn sie sich nicht sogar völlig von ihrem Äquivalent 8859 unterscheiden.
+1 für die Beantwortung der Frage, aber darüber hinausgehend und mit Informationen über verwandte Kodierungen. Re: Codepunkte für UTF-8, gemäß stackoverflow.com/a/38488358/3353984 UTF-8 unterstützt 2^21 Codepunkte. Ist das ein Fehler, oder ist hier vielleicht eine Korrektur erforderlich?
Unicode besteht eigentlich aus 17 Ebenen mit 2^16 Codepunkten. 0x00_0000 bis 0x1F_FFFF. Auf den 17 Ebenen können 1.114.112 Codepunkte untergebracht werden. Davon sind 2.048 Surrogate, 66 Nicht-Zeichen und 137.468 für den privaten Gebrauch reserviert, so dass 974.530 für die öffentliche Zuweisung verbleiben - etwa 1 Million. Siehe Wie viele Zeichen kann UTF-8 kodieren? .
ASCII: 7 Bits. 128 Codepunkte.
ISO-8859-1: 8 Bits. 256 Codepunkte.
UTF-8: 8-32 Bits (1-4 Bytes). 1.112.064 Codepunkte.
Sowohl ISO-8859-1 als auch UTF-8 sind rückwärtskompatibel mit ASCII, UTF-8 ist jedoch nicht rückwärtskompatibel mit ISO-8859-1:
#!/usr/bin/env python3
c = chr(0xa9)
print(c)
print(c.encode('utf-8'))
print(c.encode('iso-8859-1'))
Ausgabe:
©
b'\xc2\xa9'
b'\xa9'
ISO-8859-1 ist ein alter Standard aus den 1980er Jahren. Er kann nur 256 Zeichen darstellen und ist daher nur für einige Sprachen der westlichen Welt geeignet. Selbst bei vielen unterstützten Sprachen fehlen einige Zeichen. Wenn Sie eine Textdatei in dieser Kodierung erstellen und versuchen, einige chinesische Zeichen zu kopieren und einzufügen, werden Sie merkwürdige Ergebnisse sehen. Mit anderen Worten: Verwenden Sie sie nicht. Unicode hat die Welt erobert, und UTF-8 ist heutzutage so gut wie der Standard, es sei denn, Sie haben noch andere Gründe (wie HTTP-Header, die mit allem kompatibel sein müssen).
Ich hatte gesehen, dass Umlaute angeblich nicht mit UTF8 konvertiert werden. Wir haben Beispiele dafür gesehen und bei der Suche haben wir ISO-8859-1 gefunden und es scheint zu funktionieren. Wir haben eine Menge deutscher Wissenschaftler, mit denen wir arbeiten.
Umlaute werden in utf8 als zwei Zeichen dargestellt. Sie lassen sich gut konvertieren und funktionieren gut. Das Problem kommt von Programmen, die 1 Byte pro Zeichen erwarten. Für diese Legacy-Programme hat ISO-8859-1 1-Byte-Umlaute.
"Mit anderen Worten: Verwenden Sie es nicht." Das würde ich so nicht sagen, denn es gibt Anwendungsfälle, in denen ISO-8859-1 viel besser geeignet ist als UTF-8, weil ein einziges Byte und 256 Zeichen ausreichen können, was zu einer schnelleren Verarbeitung und weniger Nutzlast führt.
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.