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

XML to MySQL Umlaute Problem



<< >> 3 Einträge, 1 Seite
Gast Gast
 2007-05-21 15:51
#35524 #35524
Hallo Forum,
ich habe ein einfaches Script, das mir XML Daten in einer MySQL DB ablegen soll. Das funktioniert auch einwandfrei. ABER, sobald sich in der XML Datei Umlaute befinden, werden diese nicht korrekt in der DB gespeichert. Die Angabe "encoding="ISO-8859-1" ist in der XNL Datei vorhanden.
Meine Vermutung, dass XML::XPath immer mit UTF-8 arbeitet. Somit wäre also irgendwo im Script eine Umwandlung in Latin-1 notwendig...aber wo und wie?
Bin ich der Einzige im WEB, der XML Daten mit Hilfe von Perl in eine MySQL Datenbank speichern möchte, oder ist mein Ansatz schon vollkommen falsch? Anbei das Script und die XML Datei:

users.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<DBI driver="mysql:database=mydb;host=localhost">
<RESULTSET statement=" SELECT user_id, email FROM users_table">
<ROW>
<user_id>ü</user_id>
<email>email1</email>
</ROW>
<ROW>
<user_id>ß</user_id>
<email>email2</email>
</ROW>
<ROW>
<user_id>ä</user_id>
<email>email3</email>
</ROW>
</RESULTSET>
</DBI>



import.pl

use strict;
use DBI;
use XML::XPath;
use Unicode::String;

my $dbh = DBI->connect("dbi:mysql:db205326771", "dbo205326771", "test") || die $DBI::errstr;;
my $xp = XML::XPath->new(filename => 'users.xml');

# Versuch der Unicode Umwandlung
# my $s = new Unicode::String($xp);
# my $s = $s->latin1();


# Tabelle "users" leeren
$dbh->do("DELETE FROM users WHERE user_id LIKE '%' ");

my $sth = $dbh->prepare(qq{INSERT INTO users VALUES (?, ?)});

# loop through the records
foreach my $row ($xp->findnodes('/DBI/RESULTSET/ROW')) {

# extract from the XML
my $email = $row->find('email')->string_value;
my $user = $row->find('user_id')->string_value;

# insert into the db (using placeholders)
$sth->execute($email, $user) || die $DBI::errstr;
}

$dbh->disconnect;
print "Success!!!\n";

Vielen Dank für einen Tipp
Michael
sid burn
 2007-05-21 16:07
#35525 #35525
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Es gibt das Modul Encode womit du die Kodierung ändern kannst.

Code: (dl )
1
2
3
4
use Encode qw();

my $variable = "Inhalt mit UTF-8 darstellung von Perl";
print Encode::encode('iso-8859-1', $variable);


Vielleicht hilft das schon.
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
RalphFFM
 2007-05-22 00:14
#35526 #35526
User since
2006-11-16
258 Artikel
BenutzerIn
[Homepage] [default_avatar]
@mikew: Ich würde Dir empfehlen mit UTF-8 in der Datenbank zu speichern. Meiner Erfahrung nach beseitigt das viele Probleme.
<< >> 3 Einträge, 1 Seite



View all threads created 2007-05-21 15:51.