Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]5035[/thread]

Entry macht Umlaute zu Hex??? (Seite 2)



<< |< 1 2 >| >> 20 Einträge, 2 Seiten
ptk
 2005-07-21 23:11
#44222 #44222
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Sag mal genau: wo kommen die Daten her --- wie sehen sie dort aus (sprich: welches Encoding) --- wo sollen sie hin --- und wie sollen sie dort aussehen (Encoding)? Wenn die Daten von ausserhalb kommen, dann musst du das Encoding bei der Eingabe angeben. Wenn die Daten nach ausserhalb sollen, musst du das Encoding bei der Ausgabe angeben. Wenn die Daten in Perl bleiben, musst du nichts machen. Eine Ausnahme sind nur XS-Module, bei denen muss u.U. auch encodiert werden.
Gast Gast
 2005-07-22 11:24
#44223 #44223
Die Daten kommen wie im beispiel von oben aus dem Entry-Feld und sollen in eine mySql-Datenbank. In diesem Entry-Feld gebe ich Jörich ein und raus kommt in der DB Jörich.

Ich weis leider nicht welche Encoding das ist. Ich bin der Meinung das es am Tk::Entry liegt. Ist halt nicht für Umlaute gedacht...
ptk
 2005-07-22 12:53
#44224 #44224
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Nein, es liegt nicht an Tk::Entry. Tk 804 kommt ganz gut mit "Perl-Characters" zurecht, DBD::mySQL wahrscheinlich eher nicht. Also du hast hier den Fall: die Eingabe (Tk::Entry) ist OK, und bei der Ausgabe brauchst du die rohen Daten ("Octets"). Dazu verwendet man Encode::encode:
Code: (dl )
$octets = Encode::encode("iso-8859-1", $string)

Die $octets kannst du dann an DBD::mySQL schicken. Beim Rueckweg muesstest du Encode::decode mit dem gleichen Encoding verwenden. Wenn du allerdings nur iso-8859-1 verwendest, kann man diesen Schritt wohl weglassen.

Die Loesung mit from_to ist falsch, weil man hiermit nur von Octets zu Octets wandelt.
Gast Gast
 2005-07-24 14:32
#44225 #44225
Ok dann dank ich dir restmal. So geht's wenigstens erst mal und ich kann weiter machen, da es ja wenigstens eine Lösung gibt.

Auf dauer wird das natürlich nervig werden jeden Wert aus den Entry durch den Encoder zu jagen. Gibt es denn hier in der Gemeinde niemanden, der schon mal mit Tk::Entry's Werte in ein DB reingeschrieben hat? Naja ich warte mal bis nach den Ferien. Vielleicht gibts da noch mal eine Tip.

Wenn nicht muss es halt so gehen. Thx
ptk
 2005-07-25 13:24
#44226 #44226
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Reite doch nicht immer auf Tk::Entry rum. Der Fix muesste in DBI oder DBD::mysql gemacht werden. MySQL hat ja seit 4.1 die Moeglichkeit, mit verschiedenen Charsets umzugehen. Theoretisch koennte DBD::mysql feststellen, welches Charset eingestellt ist und die Konvertierung automatisch durchfuehren.

In einer Mailingliste habe ich einen Patch gesehen, der DBD::mysql bessere utf-8-Unterstuetzung verleiht. Vielleicht wird dieser Patch in einer der naechsten DBD::mysql-Versionen eingebaut werden.
Crian
 2005-07-27 19:08
#44227 #44227
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
Und zu Tk kannst Du lange auf das Ferienende warten, kompetentere Hilfe als von Ptk wirst Du nicht bekommen. Oder positiver formuliert: ptk heißt nicht aus Versehen so ;)
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
Strat
 2005-07-28 13:23
#44228 #44228
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
"Paulchen The Kangaroo" ;-)
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Gast Gast
 2005-07-30 09:43
#44229 #44229
Ok wenn ptk der kompetenteste für Tk ist, und er weis das es an mysql liegt, würde ich gern noch als letztes wissen wie er das Problem behandeln würde. Also würdest du

1. Die Datenbank auf postgres o.ä. wecheln
2. alles immer Codieren
3. oder was ganz anders machen?

thx
Crian
 2005-08-01 15:17
#44230 #44230
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
Es liegt auch nicht an mysql. Es liegt - wenn ich ptk richtig verstehe - am Verbindungsstück "DBI oder DBD::mysql".

Ich würde vermutlich den schuldigen finden, das Teil ableiten (oder kopieren wenn kurz) und reparieren und dann dieses statt des Originals verwenden.

(Und den Patch einschicken.)

In diesem Fall scheint es den Patch ja sogar schon zu geben. Dann besorg ihn und patch Dein Modul. Spart Arbeit.\n\n

<!--EDIT|Crian|1122895107-->
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
ptk
 2005-08-02 13:32
#44231 #44231
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Man koennte auch ein von Tk::Entry abgeleitetes Widget schreiben, das immer Octets statt Characters liefert.
<< |< 1 2 >| >> 20 Einträge, 2 Seiten



View all threads created 2005-07-20 16:51.