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
User since
2006-03-29
1520
Artikel
BenutzerIn
Es gibt das Modul Encode womit du die Kodierung ändern kannst.
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
User since
2006-11-16
258
Artikel
BenutzerIn
@mikew: Ich würde Dir empfehlen mit UTF-8 in der Datenbank zu speichern. Meiner Erfahrung nach beseitigt das viele Probleme.