Thread [Tk] File auswählen unicode
(31 answers)
Opened by welle at 2013-11-01 20:07
Ich habe jetzt noch die Überprüfung des utf8-Flags eingebaut. Mein komplettes Minimalprogramm sieht jetzt so aus (Testkode ist nicht eingerückt):
Code (perl): (dl
)
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 use strict; use warnings; use feature qw( say ); use Tk; use Data::Dumper; use Encode; use Encode qw(is_utf8); my $mw; # main window $mw = MainWindow->new(); $mw->bind( '<Visibility>' => sub {openfile()} ); MainLoop(); exit; sub openfile{ my $initfile = $mw->getOpenFile; return unless $initfile; say "initfile $initfile"; say 'Dumper: ', Dumper($initfile); my $isutf8 = is_utf8($initfile); say "utf8 flag of initfile is ", $isutf8 ? 'on' : 'off'; if ($isutf8) { say ' contains well-formed UTF-8: ', is_utf8($initfile, 1) ? 'ja' : 'nein'; } $initfile = encode('iso-8859-1', $initfile, Encode::FB_CROAK); say "initfile $initfile"; say 'Dumper: ', Dumper($initfile); $isutf8 = is_utf8($initfile); say "utf8 flag of initfile is ", $isutf8 ? 'on' : 'off'; if ($isutf8) { say ' contains well-formed UTF-8: ', is_utf8($initfile, 1) ? 'ja' : 'nein'; } open( my $SUDO, '<', $initfile ) or die("can't open $initfile: $!"); say "opened $initfile"; my @game = <$SUDO>; say "game\n", @game; close($SUDO); return; } Die zugehörige Ausgabe ist Code: (dl
)
1 initfile U:/Benutzer/Klaus/Perl/Sudoku-Trainer/Rätsel/Aufg/Aufg54a.txt Die Ausgabe hinter dem encode sieht beim ursprünglichen Programm anders aus: Code: (dl
)
1 initfile U:/Benutzer/Klaus/Perl/Sudoku-Trainer/Rätsel/Aufg/Aufg54a.txt Laut Doku von Encode soll der Parameter FB_CROAK bewirken, dass bei einem Fehler beim Umkodieren eine Exception ausgelöst wird. Demnach ist beim Aufruf von encode alles gut gegangen. Aber offenbar ist nichts umkodiert worden. Hat jemand eine Idee? Gruß
GUIfreund |