Schrift
[thread]9936[/thread]

Tk::Error: Wide character in subroutine entry

Leser: 1


<< >> 9 Einträge, 1 Seite
Gast Gast
 2007-08-02 15:12
#97289 #97289
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.
styx-cc
 2007-08-02 16:36
#97321 #97321
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Hast du vielleicht auch ein bisschen Code, um den "Fehler" zu reproduzieren?
Pörl.
Gast Gast
 2007-08-02 20:07
#97344 #97344
Ja, klar:

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
#!/usr/local/bin/perl

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:
Code: (dl )
GoodFella
 2007-08-02 20:42
#97345 #97345
User since
2007-01-09
192 Artikel
BenutzerIn
[default_avatar]
(warum werd ich als gast angezeigt?)
renee
 2007-08-02 21:17
#97346 #97346
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
hattest Du Dich vielleicht nicht eingeloggt?
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
ptk
 2007-08-02 23:02
#97354 #97354
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Guck dir mal den Abschnitt VALIDATION in der Tk::Entry-Dokumentation an. Alternativ könntest du das Modul CPAN:Tk::FilterEntry verwenden.
Gast Gast
 2007-08-03 00:12
#97365 #97365
@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.
GoodFella
 2007-08-03 00:15
#97366 #97366
User since
2007-01-09
192 Artikel
BenutzerIn
[default_avatar]
(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"
ptk
 2007-08-03 02:13
#97372 #97372
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
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).
<< >> 9 Einträge, 1 Seite



View all threads created 2007-08-02 15:12.