Schrift
[thread]13103[/thread]

Perl-Tk und Umlaute

Leser: 8


<< >> 8 Einträge, 1 Seite
meier19
 2009-02-04 18:54
#118655 #118655
User since
2009-02-03
73 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ich arbeite das ausgezeichnete Tutorial zu Perl mit dem Tk-Modul durch:
http://wiki.perl-community.de/bin/view/Wissensbasi...

Bei der Ausführung der Skript-Beispiele werden Umlaute nicht korrekt angezeigt. Wie kann dies korrigiert werden?

Wahrscheinlich muss das Encode-Modul verwendet werden, komme aber mit der konkreten Anwendung nicht zurecht.

Ich füge hier noch ein Code-Beispiel aus dem Tutorial mit Umlaut bei:

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

use Tk;

my $fenster = MainWindow->new();

$fenster->Label(-text => 'Hallöchen Welt')->pack();

MainLoop();


Als Betriebssystem habe ich Linux-Ubuntu 8.0.4 und Perl in der Version 5.8.8.

Für Hilfe danke ich im Voraus.
Der Mensch schöpft seine Gesetze nicht aus der Natur, sondern schreibt sie dieser vor (Immanuel Kant).
Linuxer
 2009-02-05 00:07
#118656 #118656
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
Ist Deine Skriptdatei in utf8 Kodierung gespeichert?
Wenn ja, versuch mal use utf8; einzubauen.
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
Crian
 2009-02-05 09:55
#118657 #118657
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Unter welchem Betriebssystem arbeitest du?

Wenn du noch fragen zu dem Tutorial hast oder dir irgendwas auffällt, sag bitte Bescheid, ich hab das damals überarbeitet und ins Wiki gestellt.

Dein Code einfach bei mir in Vi kopiert und ausgeführt zeigt den Umlaut richtig an.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
meier19
 2009-02-05 14:51
#118663 #118663
User since
2009-02-03
73 Artikel
BenutzerIn
[Homepage] [default_avatar]
Für beide Beiträge vielen Dank. Und zu Crian Gratulation zum feinen Tutorial!

Als Betriebssystem habe ich Linux-Ubuntu 8.0.4 und Perl in der Version 5.8.8. Tk, wie es in der Paketverwaltung von Ubuntu zur Verfügung steht, hat die Version 8.4. Als Editor verwendet ich den Standardeditor "gedit"; das Ergebnis ist aber, wie ich ausprobiert habe, mit vi dasselbe: Umlaute werden nicht korrekt angezeigt.

Wenn ich richtig orientiert bin, arbeitet gedit mit utf-8. Ich verwende den Editor auch sonst für Perl-Skripten, und Umlaute werden sonst immer korrekt angezeigt. Beispielsweise wird das nachfolgende Perl-Skript im Terminal mit (richtigem) Umlaut angezeigt:

Code (perl): (dl )
1
2
3
#!/usr/bin/perl -w
use strict;
print "Hallöchen";


Es scheint damit, dass die Zeichen in Tk durcheinandergebracht und eben durch Tk im Fenster falsch interpretiert ausgegeben werden.

Es gibt ein Modul zum encodieren und decodieren. Mit der Anwendung komme ich aber nicht zurecht, erst recht nicht unter Tk, das ich erste am Lernen bin. Natürlich kann ich Umlaute auch als "ae" oder "ue" ausschreiben, und der Fehler hindert mich auch nicht daran, im Tutorial weiterzufahren. Aber es wäre schön - und müsste eigentlich irgendwie gehen -, dass auch Sonderzeichen richtig widergegeben werden.
Der Mensch schöpft seine Gesetze nicht aus der Natur, sondern schreibt sie dieser vor (Immanuel Kant).
Crian
 2009-02-05 15:24
#118665 #118665
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Man kann die meisten Editoren irgendwie zwingen, eine bestimmte Codierung zu verwenden.

Getestet habe ich es hier auch bei der Arbeit unter Windows, zu Hause hätte ich OS X zum testen.

Hast du das "use utf8;" was oben empfohlen wurde einmal ausprobiert?
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
meier19
 2009-02-05 17:23
#118668 #118668
User since
2009-02-03
73 Artikel
BenutzerIn
[Homepage] [default_avatar]
Habe ich nicht. Fragt nicht warum. Linuxer hat es ja deutlich geschrieben. Und es klappt!

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

use utf8;
use Tk;

my $fenster = MainWindow->new();

$fenster->Label(-text => 'Hallöchen Welt')->pack();

MainLoop();


Vielen Dank nochmals beiden Helfern!
Der Mensch schöpft seine Gesetze nicht aus der Natur, sondern schreibt sie dieser vor (Immanuel Kant).
Crian
 2009-02-06 10:29
#118674 #118674
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Ah sehr gut.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
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).
<< >> 8 Einträge, 1 Seite



View all threads created 2009-02-04 18:54.