Probleme mit Zeichencodierung
Probleme mit Zeichencodierung
am 14.03.2006 10:23:17 von Peter Honka
Hallo,
habe Probleme mit der Zeichenkodierung :-(
Die Daten eines Web-Formulars werden eingelesen:
#!/usr/bin/perl -T
use CGI ;
my $query = new CGI;
my $foo = $query->param('foo');
Der Inhalt von $foo soll dann von Google übersetzt werden:
use WWW::Babelfish;
my $obj = new WWW::Babelfish( service => 'Google', agent =>
'Mozilla/8.0' );
my $foo2 = $obj->translate( 'source' => 'German',
'destination' => 'English',
'text' => "$foo",
'delimiter' => "\n\t",
);
Manchmal, wenn User ganz bestimmte Sonderzeichen eingeben,
wird das Script dann abgebrochen mit:
Cannot decode string with wide characters at
/usr/lib/perl5/5.8.6/x86_64-linux-thread-multi/Encode.pm line 166, chunk 1.
Google sagt zu dem Thema so einiges. Habe versucht die Eingabe und
Ausgabe von/für Google in utf-8 umzuwandeln. Leider habe ich das
Problem damit noch nicht in den Griff bekommen.
Weiß jemand Rat?
Danke und Gruss
Peter
Re: Probleme mit Zeichencodierung
am 14.03.2006 17:23:17 von Peter Honka
Peter Honka schrieb:
> my $foo2 = $obj->translate( 'source' => 'German',
> 'destination' => 'English',
> 'text' => "$foo",
> 'delimiter' => "\n\t",
> );
> Manchmal, wenn User ganz bestimmte Sonderzeichen eingeben,
> wird das Script dann abgebrochen mit:
> Cannot decode string with wide characters at
> /usr/lib/perl5/5.8.6/x86_64-linux-thread-multi/Encode.pm line 166, chunk 1.
> Weiß jemand Rat?
Fürs erste habe ich das Problem mal so umgangen:
$foo2 =~ s/[^a-zA-Z0-9\-,_!"%&\/\$\(\)=\+\*\.;:äöüÄÖÜß]/ /g;
Damit erst gar keine Sonderzeichen in $foo2 vorkommen.
Dann fliegt natürlich einiges an Zeichen raus. Ist aber
nicht so wirklich schlimm, da diese Google Übersetzung
so wieso nur eine grobe Orientierungshilfe ist.
Eine wirkliche Lösung ist das aber nicht...
Für einen Ratschlag wäre ich dankbar.
Gruss
Peter
Re: Probleme mit Zeichencodierung
am 15.03.2006 05:22:53 von Slaven Rezic
Peter Honka writes:
> Hallo,
>
> habe Probleme mit der Zeichenkodierung :-(
>
> Die Daten eines Web-Formulars werden eingelesen:
>
> #!/usr/bin/perl -T
> use CGI ;
> my $query = new CGI;
> my $foo = $query->param('foo');
>
> Der Inhalt von $foo soll dann von Google übersetzt werden:
Hier musst du $foo unter Umständen decodieren (Encode::decode), und
zwar genaue dann, wenn das Web-Formular mit charset=utf-8 (oder einem
anderen charset außer iso-8859-1 oder ascii) deklariert ist. Das
solltest du sowieso machen, denn wenn die User Nicht-Latin1-Zeichen
eingeben, schickt der Browser merkwürdige Sachen.
>
> use WWW::Babelfish;
> my $obj = new WWW::Babelfish( service => 'Google', agent =>
> 'Mozilla/8.0' );
>
> my $foo2 = $obj->translate( 'source' => 'German',
> 'destination' => 'English',
> 'text' => "$foo",
> 'delimiter' => "\n\t",
> );
Hier ist die Frage, wie WWW::Babelfish intern arbeitet und ob das
Modul mit Perl-Unicode-Zeichen zurechtkommt. Wenn du glaubst, dass es
mit Unicode-Zeichen nicht gut zusammenarbeitet, solltest du wieder
zurück in ISO-8859-1-Octets kodieren (Encode::encode). Dabei könntest
du mit Text::Unidecode eine schöne Ersatzdarstellung für Zeichen
finden, die dabei verloren gehen könnten.
>
> Manchmal, wenn User ganz bestimmte Sonderzeichen eingeben,
> wird das Script dann abgebrochen mit:
> Cannot decode string with wide characters at
> /usr/lib/perl5/5.8.6/x86_64-linux-thread-multi/Encode.pm line 166,
> chunk 1.
>
> Google sagt zu dem Thema so einiges. Habe versucht die Eingabe und
> Ausgabe von/für Google in utf-8 umzuwandeln. Leider habe ich das
> Problem damit noch nicht in den Griff bekommen.
>
> Weiß jemand Rat?
>
> Danke und Gruss
> Peter
>
>
>
>
>
>
>
>
>
>
>
>
>
--
Slaven Rezic - slaven rezic de
BBBike - route planner for cyclists in Berlin
WWW version: http://www.bbbike.de
Perl/Tk version for Unix and Windows: http://bbbike.sourceforge.net
Re: Probleme mit Zeichencodierung
am 15.03.2006 14:39:38 von Peter Honka
Hallo Slaven,
>> Der Inhalt von $foo soll dann von Google übersetzt werden:
> Hier musst du $foo unter Umständen decodieren (Encode::decode), und
> zwar genaue dann, wenn das Web-Formular mit charset=utf-8 (oder einem
> anderen charset außer iso-8859-1 oder ascii) deklariert ist. Das
> solltest du sowieso machen, denn wenn die User Nicht-Latin1-Zeichen
> eingeben, schickt der Browser merkwürdige Sachen.
>> use WWW::Babelfish;
> Hier ist die Frage, wie WWW::Babelfish intern arbeitet und ob das
> Modul mit Perl-Unicode-Zeichen zurechtkommt. Wenn du glaubst, dass es
> mit Unicode-Zeichen nicht gut zusammenarbeitet, solltest du wieder
> zurück in ISO-8859-1-Octets kodieren (Encode::encode). Dabei könntest
> du mit Text::Unidecode eine schöne Ersatzdarstellung für Zeichen
> finden, die dabei verloren gehen könnten.
Ich schau mir das mal in Ruhe an und melde mich gegebenenfalls
noch mal. Danke fuer die Tipps!
Gruss
Peter Honka