User since
2005-01-28
9
Artikel
BenutzerIn
Hi!
Wenn ich mit DBI eine Tabelle (die UTF8 ist) aus der Mysql db auslese, kommen z.b. die umlaute nurnoch als Wirrwarr an. Kann mir jemand sagen wie ich das beheben kann? Mein ganzes System ist eigentlich UTF8, und Perl sollte damit auch keine Probleme haben - ausser vielleicht im DBI Modul.
Danke
User since
2005-01-17
14748
Artikel
Admin1
use utf8 benutzt?
Welches Perl benutzt du denn?\n\n
<!--EDIT|GwenDragon|1131293884-->
User since
2005-01-28
9
Artikel
BenutzerIn
ja eigentlich schon
perl -v:
This is perl, v5.8.7 built for x86_64-linux
User since
2003-11-28
3645
Artikel
ModeratorIn
[quote=GwenDragon,06.11.2005, 17:07]use utf8 benutzt?
Welches Perl benutzt du denn?[/quote]
Nein, nein und nochmals nein. "use utf8" ist in den seltesten Fällen die Lösung für utf8-Probleme.
User since
2003-11-28
3645
Artikel
ModeratorIn
[quote=dassmann,06.11.2005, 14:15]Hi!
Wenn ich mit DBI eine Tabelle (die UTF8 ist) aus der Mysql db auslese, kommen z.b. die umlaute nurnoch als Wirrwarr an. Kann mir jemand sagen wie ich das beheben kann? Mein ganzes System ist eigentlich UTF8, und Perl sollte damit auch keine Probleme haben - ausser vielleicht im DBI Modul.[/quote]
Genau. Beim Verlassen von Perl (also I/O, Kommunikation mit Datenbanken etc.) muss man genau schauen, was man bekommt bzw. was die Gegenseite erwartet. Ich mache das meistens mit Dump() aus Devel::Peek. Damit kann das geübte Auge erkennen, ob man bereits Characters hat (dann ist das UTF8-Flag gesetzt) oder nur Octets hat. Im letzteren Fall muss man manuell decode() aus Encode verwenden.
User since
2005-01-28
9
Artikel
BenutzerIn
ähm ok. Sorry wenn ich jetzt nachfrag, aber ich kann nochnet soo gut perl, als dass ich das so hinkriegen könnte *g*. Ich habs zwar mal mit Decode/Encode probiert, aber das hat zu keinem geschwünschten ergebnis geführt.
Das auslesen hab ich ja jetzt hingekreigt, doch das nächste was nicht geht ist Daten in die DB speichern. Die kommen offenbar immer im falschen encoding an. Kannst mir bitte mal jemand die paar Zeilen code aufschreiben, die nötig sind, dass es anständig funktioniert?
DANKE
User since
2003-11-28
3645
Artikel
ModeratorIn
Ich hoffe, die Variablennamen sprechen für sich:
$daten_fuer_die_datenbank = Encode::encode("utf-8", $daten);
$daten = Encode::decode("utf-8", $daten_aus_der_datenbank);
User since
2005-01-28
9
Artikel
BenutzerIn
Hm so hab ichs auch schonmal probiert :). Doch leider funktionierts so nicht
User since
2003-11-28
3645
Artikel
ModeratorIn
Was heißt "funktioniert nicht"? Gibt es Fehlermeldungen, oder sind die Umlaute zerschossen? Kannst du minimalen Code produzieren, der zeigt, was du machst?
User since
2005-01-28
9
Artikel
BenutzerIn
Die Umlaute sind zerschossen.
$dbh = DBI->connect("DBI:mysql:$db", $uname, $pw");
$dbh->do( "INSERT INTO `db` ($keys) VALUES ($values)" );
Dann sind die Umlaute zerschossen. Selbst wenn ich noch $keys = encode ("utf-8", $keys); davorschiebe hilft das nicht.
Achja, die Daten kommen aus einem HTML-Form