Thread Perl-Tk und Umlaute (7 answers)
Opened by meier19 at 2009-02-04 18:54

meier19
 2009-02-06 10:29
#118675 #118675
User since
2009-02-03
73 Artikel
BenutzerIn
[Homepage] [default_avatar]
Darf ich noch eine Ergänzungsfrage stellen?

Führt man das folgende Perl-Skript aus, so wird das Unwort im Terminal zwei mal ausgegeben, das erste Mal richtig und das zweite Mal falsch.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/perl
use strict;
use warnings;

my $hallo_1 = "Hallöchen";
print $hallo_1 . "\n";

use utf8;

my $hallo_2 = "Hallöchen";
print $hallo_2 . "\n";


Dazu könnte man einfach das "use utf8" weglassen oder auch beim zweiten Mal $hallo_1 vorgeben, und das Problem wäre behoben. Bei Anwendung von Tk aber ist dieses Modul erforderlich:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/perl
use strict;
use warnings;

use utf8;
use Tk;

my $hallo = "Hallöchen";

my $fenster   = MainWindow->new();

my $eingabe   = $fenster->Entry()->pack();
my $schalter  = $fenster->Button(-text    => $hallo, -command =>\&loeschen)->pack();

sub loeschen
        {
        my $text = $eingabe -> get;
        print $text . "\n";
        }

MainLoop();


Die Ausgabe im Terminal ist falsch, und zwar auch dann, wenn utf8 nicht eingebunden wird (abgesehen davon, dass das Wort dann auch noch auf dem Button falsch geschrieben ist).

Den Editor umstellen möchte ich nicht. Denn ich arbeite mit diesem und Perl sonst bestens zusammen.

Wie lässt sich das Problem der fehlerhaften Rückgabe von Umlauten aus Tk in den Terminal lösen?


Nachtrag: Habe die Lösung gefunden. Mit perldoc:

Code (perl): (dl )
utf8::encode($string);


Also das Ganze wie folgt:

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
#!/usr/bin/perl
use strict;
use warnings;

use utf8;
use Tk;

my $hallo = "Hallöchen";

my $fenster   = MainWindow->new();

my $eingabe   = $fenster->Entry()->pack();
my $schalter  = $fenster->Button(-text    => $hallo, -command =>\&loeschen)->pack();

sub loeschen
        {
        my $text = $eingabe -> get;
        utf8::encode($text);
        print $text . "\n";
        }

MainLoop();

Der Mensch schöpft seine Gesetze nicht aus der Natur, sondern schreibt sie dieser vor (Immanuel Kant).

View full thread Perl-Tk und Umlaute