Thread Encoding (4 answers)
Opened by leo11 at 2009-05-30 18:45

leo11
 2009-05-30 18:45
#122100 #122100
User since
2008-08-14
250 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich habe eine Datei iso.txt.
file -ik iso.txt zeigt mir an:
iso.txt: text/plain; charset=iso-8859-1

In der Datei steht:
Quote
pâté

Das entspricht in ISO-8859-1 dem Hexcode: 70 E2 74 E9
Nun konvertiere ich die Dtaei mit
iconv -f ISO-8859-1 -t UTF8 enc > utf8.txt
file -ik zeigt mir an, dass die Konvertierung funktioniert hat. In der Datei steht sonst nichts. Also kein Header mit einer Zeichensatzangabe wie in Http-Headern. Wie wurde dann der Zeichensatz erkannt?

Der Hexcode ist nach der Konvertierung in UTF8: 70 C3 A2 74 C3 A9
Ich war überrascht, dass das Zeichen â mit C3 A2 16 Bit sind. Aber wie ich nun weiß werden Unicode-Zeichen größer als 127 in UTF8 zu 2-4 Byte kodiert.
Nehmen wir mal an ich hätte file -ik nicht zur Verfügung und müsste mir den verwendeten Zeichensatz herleiten. Wie kann ich das machen?

Gibt es Alternativen zu file -ik? Bei XML funktioniert es bspw. nicht.

Schau ich mir nun die Datei utf8.txt mit vi, jedit, kate oder khexedit an erscheint der String pâté.
Offensichtlich haben die Programme im Gegensatz zu file -ik UTF8 nicht erkannt. Erst die Auswahl des Menüs "Reload with encoding-> UTF8" zeigt mir den korrekten String wieder an. Wieso haben die Programme das nicht selbstständig erkannt?

Was mir auch noch nicht klar ist ist der Zusammenhang zum Unicode. Nehmen wir wieder das Zeichen â:
Es wird im Unicode durch "U+00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX beschrieben" Das bedeutet ein einzelnes Zeichen wird im Unicode hexadezimal mit führendem U+ dargestellt. 00E2 entspricht hier UTF16 und ISO-8859-1. Aber nicht UTF-8. Dort wird â durch C3 A2 angezeigt. Irgendwie bringt mich das durcheinander. In welchem Zusammenhang stehen Unicode, UTF-8, UTF-16, ISO-8859-1? Ist Unicode die für Eindeutigkeit sorgende Definition, die sich bei Verwendung des Algorithmus von UTF-16 als 00 E2 darstellt, während der Algorithmus von UTF-8 C3 A2 ergibt? Warum hat man das so gemacht?

Nun habe ich die iso-8859-1 Datei und die utf-8 datei mal in Unicode gewandelt. file -ik zeigt mir charset=utf-16 an!? Im Hexcode sieht man,das der String nun mit ff fe beginnt. Wie ich nachgelesen habe gibt das die Byte-Reihenfolge als Little-Endian an. Es wird immer komplizierter. Ich glaub ich mach erstmal Schluss für heute.

Nur noch schnell eine letzte Frage:
Kann man eine Datei in der steht charset: UTF-8 auf korrektes UTF-8 prüfen?

Fragen über Fragen. Fällt euch das Thema auch so schwer? Hoffe jemand hilft mir hier weiter.

VG
leo11

View full thread Encoding