Thread [Tk] File auswählen unicode (31 answers)
Opened by welle at 2013-11-01 20:07

GUIfreund
 2013-11-05 14:05
#171781 #171781
User since
2011-08-08
559 articles
BenutzerIn
[default_avatar]
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
initfile U:/Benutzer/Klaus/Perl/Sudoku-Trainer/Rätsel/Aufg/Aufg54a.txt
Dumper: $VAR1 = "U:/Benutzer/Klaus/Perl/Sudoku-Trainer/R\x{e4}tsel/Aufg/Aufg54a.txt";

utf8 flag of initfile is on
contains well-formed UTF-8: ja
initfile U:/Benutzer/Klaus/Perl/Sudoku-Trainer/Rätsel/Aufg/Aufg54a.txt
Dumper: $VAR1 = 'U:/Benutzer/Klaus/Perl/Sudoku-Trainer/Rätsel/Aufg/Aufg54a.txt';

utf8 flag of initfile is off
opened U:/Benutzer/Klaus/Perl/Sudoku-Trainer/Rätsel/Aufg/Aufg54a.txt
game
-2- --- ---
4-- --- 836
--- -5- --7

7-5 --- ---
--2 --- -4-
8-- -9- 2-1

--3 7-2 ---
--1 -69 ---
--- 3-- 4-9

Die Ausgabe hinter dem encode sieht beim ursprünglichen Programm anders aus:
Code: (dl )
1
2
3
4
5
6
7
8
initfile U:/Benutzer/Klaus/Perl/Sudoku-Trainer/Rätsel/Aufg/Aufg54a.txt
Dumper: $VAR1 = "U:/Benutzer/Klaus/Perl/Sudoku-Trainer/R\x{e4}tsel/Aufg/Aufg54a.txt";

utf8 flag of initfile is on
contains well-formed UTF-8: ja
eval_err: can't open U:/Benutzer/Klaus/Perl/Sudoku-Trainer/Rätsel
/Aufg/Aufg54a.txt: No such file or directory at U:/Benutzer/Klaus
/Perl/Sudoku-Trainer/Devel/Trainer/GUI.pm line 395.

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

View full thread [Tk] File auswählen unicode