Schrift
[thread]10795[/thread]

Umlautproblem: f\xfcr anstatt für

Leser: 3


<< >> 10 Einträge, 1 Seite
Superfrank
 2007-11-14 13:10
#102399 #102399
User since
2006-09-05
164 Artikel
BenutzerIn
[default_avatar]
Hallo,
Umlaute bringen mich noch ins Grab...

Ich habe ein Perlmodul in welchem sich ein Hash mit Strings die Umlaute enthalten befindet. Diese werden ausgelesen und ggf. in die Datenbank eingetragen.
Das Perlmodul und Script ist in ISO-8859-1 geschrieben (also kein "use utf8") und im Perleditor Optiperl und meinem Standardeditor Emeditor werden die Umlaute korrekt angezeigt. Wenn das Script allerdings den String verarbeitet wird z.B. aus einem "für" ein "f\xfcr", zumindest wird es so im Apachelog angezeigt. Der String wird in die Datenbank auch nur bis zum "\xfcr" eingetragen. die mysql-Verbindung habe ich mit "SET NAMES utf8" auf utf8 gestellt und die html-Seiten sind ebenfalls utf8-kodiert, genauso wie die Tabellen der Datenbank (mysql5.0.37).

Wenn man nach "f\xfcr" googelt sieht man auch, daß andere das gleiche Problem haben.
Ich benutze Fedora 7 Kernel 2.6.22.9, das Perlscript wird als CGI aufgerufen und die Shell ist auf de_DE.UTF-8 eingestellt.

Vermutlich ließe sich das Problem beseitigen, indem ich die Kodierung der Perlscripte auf utf8 ändere, leider unterstützt Optiperl kein utf8 und ich habe nicht vor auf eine andere IDE zu wechseln.

Wie kann man aus "\xfc" ein "ü" machen?


Viele Grüsse

Frank
moritz
 2007-11-14 14:35
#102402 #102402
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
GwenDragon
 2007-11-14 14:45
#102403 #102403
User since
2005-01-17
14747 Artikel
Admin1
[Homepage]
user image
"\xFC" ist "ü"

Welches collation/charset verwendet denn die Datenbank selbst?
http://dev.mysql.com/doc/refman/5.0/en/charset.htm...

Wieso wird nur bis zum \xfc in die DB geschrieben?
Superfrank
 2007-11-14 14:50
#102404 #102404
User since
2006-09-05
164 Artikel
BenutzerIn
[default_avatar]
Hallo,
die Datenbank verwendet utf8_general_ci.
Ich könnte natürlich wild de/enkodieren bis es irgendwann klappt, würde aber gerne die Ursache verstehen.

Grüsse

Frank
GwenDragon
 2007-11-14 14:54
#102405 #102405
User since
2005-01-17
14747 Artikel
Admin1
[Homepage]
user image
Quote
Wenn das Script allerdings den String verarbeitet wird z.B. aus einem "für" ein "f\xfcr"

Und wie verarbeitet das Skript dies?
Superfrank
 2007-11-14 15:58
#102408 #102408
User since
2006-09-05
164 Artikel
BenutzerIn
[default_avatar]
Hallo,
es wird ein Hashwert aus einem Hash ausgelesen und in die Datenbank eingetragen.
Mehr passiert da nicht. Wenn das Script in iso8859-1 geschrieben ist sollte man doch Umlaute die in dem Zeichensatz enthalten sind in einem String verwenden können. Aber das Umwandeln des Strings in utf8 bingt nichts und ich habe keinen Schimmer welche Kodierung "\xfc" ist.

Grüsse

Frank
GwenDragon
 2007-11-14 16:11
#102411 #102411
User since
2005-01-17
14747 Artikel
Admin1
[Homepage]
user image
Ic h weiß nicht, was du da verdrehst, aber in meiner My SQL5 TestDB geht sowas.
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
use strict;
use warnings;
use DBI;

my $str = 'Das ist das Ü, was kein Ö ist oder niemals ein Ä!';
my $str1 = "1. Das ist das kleine \xfc, was kein Ö ist oder niemals ein Ä!";
my $str2 = '2. Das ist das kleine \xfc, was kein Ö ist oder niemals ein Ä!';

my $dsn = 'DBI:mysql:database=testdb;host=localhost;port=3309';
my $dbh = DBI->connect($dsn, 'test', 'test', undef) or die $DBI::errstr;

# hier stehen große Umlaute in der Tabelle
my $sth = $dbh->do( 'INSERT INTO test (NAME) VALUES (?)', undef,  $str )
        or die $DBI::errstr;

# hier steht nicht \xfc sondern ü in der Tabelle
$sth = $dbh->do( 'INSERT INTO test (NAME) VALUES (?)', undef,  $str1 )
        or die $DBI::errstr;

# hier steht wirklich \xfc in der Tabelle
$sth = $dbh->do( 'INSERT INTO test (NAME) VALUES (?)', undef,  $str2 )
        or die $DBI::errstr;
GwenDragon
 2007-11-14 16:31
#102413 #102413
User since
2005-01-17
14747 Artikel
Admin1
[Homepage]
user image
Superfrank+2007-11-14 14:58:43--
Hallo,
es wird ein Hashwert aus einem Hash ausgelesen und in die Datenbank eingetragen.

0: Schon mit Optiperl mal gesteppt und die Werte angesehen?
1. Quotest du extra nochmals für die Datenbank oder wie lässt du das machen?
2. Hast du dir mal die Werte des Hash mit CPAN:Data::Dumper angezeigt?
3. Der Zeichensatz ist wirklich für die Tabelle/Dtanebank auf UTF?

Irgendwo muss ja was verändert und falsch abgespeichert werden.
pq
 2007-11-14 16:49
#102414 #102414
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
wenn die daten aus dem script in latin1 ankommen, müssen sie ja noch mit decode umgewandelt
werden. vielleicht fehlt das.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Superfrank
 2007-11-14 18:01
#102420 #102420
User since
2006-09-05
164 Artikel
BenutzerIn
[default_avatar]
Hallo,
ich glaube es hängt mit dem Apache zusammen.
Ich habe auf den String mal ein

Code (perl): (dl )
1
2
3
4
            my @allchars = (unpack("U*", $string));
                foreach my $localchar (@allchars){
                        print STDERR "$localchar " .  chr($localchar) . "\n";
                        }


gemacht und für $localchar kommt "252" und für chr($localchar) kommt "\xfc" im Apachelog heraus.

Ein

Code (perl): (dl )
perl -e 'print chr(252)'


ergibt aber das gewünschte "ü"

Ich such noch mal etwas...

Grüsse

Frank
<< >> 10 Einträge, 1 Seite



View all threads created 2007-11-14 13:10.