Jemand zu Hause?Leser: 21
Quotepâté
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?
[...]
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?
[...]
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?
[...]
Quote[...]
In welchem Zusammenhang stehen Unicode, UTF-8, UTF-16, ISO-8859-1?
[...]
Quote[...]
Kann man eine Datei in der steht charset: UTF-8 auf korrektes UTF-8 prüfen?
[...]
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.
2009-05-30T20:51:35 murphyWenn Du eine ähnliche Art von Zeichensatzerkennung in Perl machen möchtest, gibt es dafür das ModulEncode::Guess.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
#!/usr/bin/perl use strict; use warnings; use Encode; use Encode::Guess; my $data='pâté'; #my $data='pate'; my $enc = guess_encoding($data, qw/ascii utf8 utf16 iso-8859-1/); ref($enc) or die "Can't guess: $enc"; # trap error this way #my $utf8 = $enc->decode($data); # or my $utf8 = decode($enc->name, $data); print $utf8,"\n\n";
2009-05-31T07:41:23 leo11[...]
Code (perl): (dl )1 2 3 4my $enc = guess_encoding($data, qw/ascii utf8 utf16 iso-8859-1/); ref($enc) or die "Can't guess: $enc"; # trap error this way [...] my $utf8 = decode($enc->name, $data);
[...]
Quote[...]
Das Bsp. bringt mir den Fehler:
UTF-16:Unrecognised BOM 70e2 at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/Encode/Guess.pm line 135.
Lass ich utf16 weg geht es.
[...]
Quote[...]
Wie kann ich mir eine Liste der unterstützen Zeichensätze ausgeben lassen? So etwas wie iconv --list.
[...]
perl -MEncode -le 'print for (Encode->encodings(":all"));'Quote[...]
Mein Ziel ist ein Oneliner der mir die Kodierung eines Files angibt wie es file -ik tut. Optimal wäre, wenn er auch bei XML-Dateien geht.
perl -MEncode -MEncode::Guess -le 'my $enc = guess_encoding(<STDIN>, grep !m/^UTF-(?:16|32).*(?![BL]E)$/i, Encode->encodings(":all")); if (ref $enc) { print $enc->name } else { exit 1 }'
Wie installiert man ein Modul?