Dieser Fehler tritt bei Benutzung von utf8::downgrade auf, ich habe das jetzt so gelöst, dass ich den Code in eval {} lege und $@ abfange.. allerdings wäre mir lieber, wenn ich den Input einfach so filtern könnte, dass Wide Chars vorher rausgeschmissen werden, brauch ich eh nicht.. Jemand eine Idee, wie das zu lösen wäre? Ich benutze utf8::downgrade bei jeder Übergabe von Daten eines Tk Widgets, wäre also sehr viel Aufwand, jedesmal einen eval Block einzufügen.
User since
2006-05-20
533
Artikel
BenutzerIn
Hast du vielleicht auch ein bisschen Code, um den "Fehler" zu reproduzieren?
Pörl.
Ja, klar:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
use Tk;
use strict;
use warnings;
my $main = new Tk::MainWindow();
my $entry_test = $main->Entry()->pack();
my $btn_test = $main->Button( -text => ' Test ',
-command => sub {
my $text = $entry_test->get();
eval { utf8::downgrade($text); };
&msg($main, $@) if ($@);
} )->pack();
sub msg
{
my ($parent, $msg) = @_;
$parent->messageBox( -title => 'Event', -message => $msg, -type => 'ok', -icon => 'info' );
}
MainLoop();
..und hier der Wide Character aus dem String, den ich zum Test genommen habe:
User since
2007-01-09
192
Artikel
BenutzerIn
(warum werd ich als gast angezeigt?)
User since
2003-08-04
14371
Artikel
ModeratorIn
hattest Du Dich vielleicht nicht eingeloggt?
User since
2003-11-28
3645
Artikel
ModeratorIn
Guck dir mal den Abschnitt VALIDATION in der Tk::Entry-Dokumentation an. Alternativ könntest du das Modul
Tk::FilterEntry verwenden.
@renee: war ich eigentlich (bin mir jetzt aber nicht mehr 100% sicher)
@ptk: danke, allerdings brauche ich Tk::Entry nicht, da auf deren Daten über die Coderef des Buttons zugegriffen wird und ich diese vor Aufruf von utf8::downgrade selbst filtern könnte,denn Validation macht ja nix anderes, als bei Datenzugriff eine Coderef aufzurufen; genau wie Tk::FilterEntry. Mein Problem besteht aber darin, einen Wide Character rauszufiltern, keine Ahnung woran ich den erkenne; ausserdem wäre es nett, wenn utf8::downgrade dies selbst tun würde statt die Codref abzubrechen.
Die Fehlermeldung kommt ja nur von Tk, weil der Fehler in der Coderef eines Widgets passiert; die Ursache ist utf8::downgrade.
User since
2007-01-09
192
Artikel
BenutzerIn
(arrg, schon wieder als Gast, diesmal aber vergessen einzuloggen .. kann es sein, dass die Cookies des neuen Forums nur pro Browsersitzung gelten?)
Poste, weil ich editieren wollte: "brauche Tk::Entry -> Validation nicht"
User since
2003-11-28
3645
Artikel
ModeratorIn
Du kannst Encode::encode mit dem richtigen CHECK-Flag verwenden. Das sieht sowieso sympathischer aus als utf8::downgrade.
Ein wide character ist ein Zeichen > chr(255).