510 Stimmen

Was ist der Unterschied zwischen UTF-8 und ISO-8859-1?

Was ist der Unterschied zwischen UTF-8 y ISO-8859-1 ?

4voto

Chris Morgan Punkte 78929

Eine weitere wichtige Erkenntnis: Wenn Sie sehen iso-8859-1 bezieht es sich wahrscheinlich auf Fenster-1252 statt ISO/IEC 8859-1 . Sie unterscheiden sich im Bereich 0x80-0x9F, wobei ISO 8859-1 die C1-Steuercodes hat und Windows-1252 stattdessen nützliche sichtbare Zeichen.

ISO 8859-1 hat zum Beispiel 0x85 als Steuerzeichen (in Unicode, U+0085, ``), während Windows-1252 eine horizontale Ellipse hat (in Unicode, U+2026 HORIZONTAL ELLIPSIS, ).

En WHATWG Kodierungsspezifikation (wie von HTML verwendet) erklärt ausdrücklich iso-8859-1 ein Etikett zu sein für windows-1252 und Webbrowser unterstützen ISO 8859-1 in keiner Weise: Die HTML-Spezifikation besagt, dass alle Kodierungen in der Encoding-Spezifikation unterstützt werden müssen, und nicht mehr.

Interessant ist auch, dass numerische HTML-Zeichenreferenzen im Wesentlichen Windows-1252 für 8-Bit-Werte und nicht Unicode-Codepunkte verwenden; per https://html.spec.whatwg.org/#numeric-character-reference-end-state , … wird U+2026 statt U+0085 erzeugt.

0 Stimmen

Huch! Ich dachte, ich hätte das geschrieben, aber ich habe es beim Umschreiben verloren. Ich habe es jetzt eingefügt.

3voto

Nikhil VJ Punkte 4044

Aus einem anderen Blickwinkel betrachtet, können Dateien, die sowohl mit Unicode- als auch mit Ascii-Kodierung nicht gelesen werden, weil sie ein Byte 0xc0 enthalten, scheinen von iso-8859-1 richtig gelesen zu werden. Die Einschränkung ist, dass die Datei natürlich keine Unicode-Zeichen enthalten sollte.

0voto

Alan Jurgensen Punkte 763

Ich habe diese Frage unter dem Gesichtspunkt untersucht, inwieweit sie miteinander vereinbar sind. Latin1 Zeichensatz (iso-8859) ist 100% kompatibel zu in einem utf8 Datenspeicher gespeichert werden. Alle ASCII- und erweiterten ASCII-Zeichen werden als Ein-Byte-Zeichen gespeichert.

Umgekehrt kann der Wechsel von utf8 zu Latin1 funktionieren oder auch nicht. Wenn es irgendwelche 2-Byte-Zeichen gibt (Zeichen jenseits von extended-ascii 255), werden sie nicht in einem Latin1-Datenspeicher gespeichert.

2 Stimmen

Hilfreich, aber ich glaube, Sie meinten 127 anstelle von 255 in extended-ascii 255?

24 Stimmen

Latin-1 oder iso-8859-1 ist nicht zu 100 % kompatibel mit der Speicherung in utf8. Jedes Latin-n- oder iso-8859-n-Zeichen über 127 wird nicht in ein Einzelbyte-UTF-8-Zeichen übersetzt. Für die Werte 1-127 werden sie jedoch genau übersetzt.

6 Stimmen

Diese Antwort ist etwas verwirrend, da sie den Begriff "erweitertes ASCII" verwendet, der sich einfach auf jede Zeichenkodierung bezieht, die nicht ASCII ist. UTF-8 und latin-1 sind Beispiele für erweiterte ASCII-Kodierungen. Allerdings können Nicht-ASCII-Latin-1-Zeichen (d. h. Codepunkte über 127) in UTF-8 nicht als ein einziges Byte kodiert werden.

CodeJaeger.com

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.

Powered by:

X