Leser: 1
![]() |
![]() |
7 Einträge, 1 Seite |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
# Which are the expected Unicode codepoints? my @expected_codepoints = (9, 10, 13, # newlines+tab 32..127, (map { ord } split //, "äöüÄÖÜß"), 0x20ac, # euro sign ); # Which are the expected encodings? May be empty, in this case # all to perl available encodings will be checked. my @expected_encodings = qw(cp1252 iso-8859-1 utf-8); # Text to analyze, specify in raw octets: my $octets_to_analyze = "Bla äöü \x80"; ###################################################################### # No user-servicable parts below this point. use strict; use Encode; if (!@expected_encodings) { @expected_encodings = Encode->encodings(":all"); } my %expected_codepoints = map {($_,1)} @expected_codepoints; my @encoding_result; for my $encoding (@expected_encodings) { my $characters = eval { decode($encoding, $octets_to_analyze, Encode::FB_CROAK|Encode::LEAVE_SRC); }; if (!$@) { my %got_codepoints; for my $codepoint (map { ord } split //, $characters) { $got_codepoints{$codepoint}++; } my $fitting_codepoints = 0; while(my($k,$v) = each %got_codepoints) { if (exists $expected_codepoints{$k}) { $fitting_codepoints++; } } push @encoding_result, [$encoding, $fitting_codepoints*100/keys %got_codepoints]; } } @encoding_result = sort { $b->[1] <=> $a->[1] } @encoding_result; for my $result (@encoding_result) { printf "%-30s: %4.1f%%\n", $result->[0], $result->[1]; }
Taulmarill+2007-09-24 16:45:32--... Du solltest dich mit deinen Datenlieferanten besprechen und diese dazu überreden, dass sie entweder Ihre Daten auf irgend eine Weise markieren ...
Taulmarill+2007-09-24 16:45:32--... Zum ändern der Codierung kannst du das Core-Modul Encode benutzen. ...
Quote... mein Problem ist, dass der Datenlieferant eher ein DAU ist ...
Taulmarill+2007-09-25 10:27:36--Mit "markieren" meine ich eine beliebige Methode, mit der der Datenlieferant die Daten um die Information ergänzt, um welche Codierung es sich handelt. Das kann z.b. ein Teil des Dateinamens sein oder einfach in der ersten Zeile stehen. An eine bestimmte Methode hatte ich nicht gedacht. Was am sinnvollsten ist, hängt von den Rahmenbedingungen ab.
QuoteSchau dir an, wie die Daten erzeugt werden. Evtl. kann man da ansetzen und eine Vorgehensweise erarbeiten, die dir immer das selbe Format garantiert.
![]() |
![]() |
7 Einträge, 1 Seite |