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

murphy
 2009-05-30 22:51
#122115 #122115
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
2009-05-30T16:45:29 leo11
[...]
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?
[...]

file errät anhand der Bytesequenzen, die in der Datei vorkommen, welchen Zeichensatz sie haben könnte. Das liefert zwar keine garantiert zuverlässigen Ergebnisse, funktioniert aber doch in den meisten Fällen.


Quote
[...]
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?
[...]

Wenn Du eine ähnliche Art von Zeichensatzerkennung in Perl machen möchtest, gibt es dafür das Modul CPAN:Encode::Guess.

Quote
[...]
Schau ich mir nun die Datei utf8.txt mit vi, jedit, kate oder khexedit an erscheint der String pâté. [...] Wieso haben die Programme das nicht selbstständig erkannt?
[...]

Wieso sollten sie? Gerade wenn man eine Datei bearbeiten und nicht nur irgendwie Informationen auslesen will, sollte man sich besser nicht auf geratene Kodierungen verlassen...

Quote
[...]
In welchem Zusammenhang stehen Unicode, UTF-8, UTF-16, ISO-8859-1?
[...]

Unicode ist ein Standard, der unter anderem beschreibt, welche Zeichen es überhaupt auf der Welt gibt, wie man sie klassifizieren kann und der jedem Zeichen eine eindeutige Identifikationsnummer zuordnet. Diese Identifikationsnummer hat nun aber nicht unbedingt etwas mit der Darstellung der Zeichen im Arbeitsspeicher oder in einer Datei zu tun.

Die verschiedenen Kodierungen wie ISO-8859-1, UTF-8 oder UTF-16 beschreiben im Prinzip jeweils eine Zuordnung zwischen den Unicodeidentifikationsnummern von Zeichen und bestimmten Sequenzen von Bytes, die sich zum Ablegen im Arbeitsspeicher oder in Dateien eignen.

Die Unterschiede zwischen den Kodierungen rühren daher, dass sie für verschiedene Zwecke gemacht sind: ISO-8859-1 speichert zum Beispiel jedes Zeichen in nur einem Byte ab, kann dafür aber fast nur Zeichen kodieren, die in den Sprachen Mitteleuropas vorkommen; UTF-8 stellt Zeichen als variabel lange Bytesequenzen dar, was unpraktisch zu verarbeiten sein kann und im Speicherverbrauch je nach Sprache des kodierten Textes stark variiert, dafür aber zumindest alle Unicodezeichen beherrscht und kompatibel mit ASCII ist; UTF-16 stellt die meisten Zeichen in jeweils zwei Bytes dar und beherrscht auch alle Unicodezeichen, verschwendet dafür aber zum Beispiel auch ein Byte Speicher pro Zeichen das eigentlich auch mit ASCII kodierbar wäre und man muss darauf achten, ob das Speicherformat little- oder big-endian ist. Darüberhinaus gibt es natürlich auch noch dutzende weitere Zeichenkodierungen...

Quote
[...]
Kann man eine Datei in der steht charset: UTF-8 auf korrektes UTF-8 prüfen?
[...]

Die Antwort lautet natürlich ja :-)

Lies Dir zum Beispiel mal die Dokumentation des Perlmoduls CPAN:Encode oder die Manpages zu den Backendfunktionen von iconv durch, dann wirst Du feststellen, dass man in beiden Fällen beim Dekodieren für den Fall fehlerhafter Eingabedaten verschiedene Behandlungsmöglichkeiten einstellen kann.
When C++ is your hammer, every problem looks like your thumb.

View full thread Encoding