XML::DOM::Parser hat Probleme mit Umlauten
Marion Schuhmann
- xml
0 Christian Kruse0 Marion
Hallo Leute,
seit langem habe ich mal wieder ein großes Problem.
Nach einer Umstellung von Suse9.1 auf Suse9.2 und den damit verbundenen neuen Perl-Modulen XML,DOM,Parser funktioniert komischerweise die Umlaut-Darstellung nicht mehr.
Also Wörter wie "Bücher" werden nun falsch dargestellt.
Wie gesagt es ist bisher immer gegangen.
Nur nach der Software-Umstellung geht es nicht mehr.
Zur Info: Der Parser hat "ISO-8859-1" intern eingestellt und wandelte dies bisher zuverlässig um.
Frühere Version von XML::DOM::Parser war 2.41, nun 2.44!!!
Kennt jemand das Problem und hat es gelöst.
Gruß,
Marion
你好 Marion,
Nach einer Umstellung von Suse9.1 auf Suse9.2 und den damit verbundenen
neuen Perl-Modulen XML,DOM,Parser funktioniert komischerweise die
Umlaut-Darstellung nicht mehr.
Was heisst „funktioniert nicht mehr“?
Also Wörter wie "Bücher" werden nun falsch dargestellt.
Falsch? Inwiefern? Was ist falsch?
再见,
克里斯蒂安
Hier ein Ausschnitt aus meiner XML-Datei:
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<menu>
<menu_anmeldung text="Anmeldung" availableIf="immer" availableFor="alle">
<submenu_level0 text="Autor" link="uni.pl?fenster=popup&aktion=anmeldung&ben_typ=autor" availableIf="abgemeldet" availableFor="alle"></submenu_level0>
<submenu_level0 text="Redakteur" link="uni.pl?fenster=popup&aktion=anmeldung&ben_typ=redakteur" availableIf="abgemeldet" availableFor="alle"></submenu_level0>
<submenu_level0 text="Administrator" link="uni.pl?fenster=popup&aktion=anmeldung&ben_typ=admin" availableIf="abgemeldet" availableFor="alle"></submenu_level0>
<submenu_level0 text="_seperator_"></submenu_level0>
<submenu_level0 text="Abmelden" link="uni.pl?aktion=abmelden" availableIf="angemeldet" availableFor="alle"></submenu_level0>
</menu_anmeldung>
........
</menu>
Das alles wird mit XML::DOM::Parser eingelesen und verarbeitet.
my $parser = new XML::DOM::Parser;
my $document = $parser->parsefile ("$ENV{DOCUMENT_ROOT}/conf/menudata.xml");
etc.,etc.,etc........
Das hat ja vor der Umstellung auf SUSE9.2 auch funktioniert....
Ich verstehe bloß nicht, dass es nun statt z.B. Bücher folgendermaßen dargestellt wird: Bücher
Die Beschreibung vom Parser besagt aber, das "ISO-8859-1" (also zuständig auch für Umlaute) automatisch verwendet wird.
Wie gesagt, es hat ja auch vorher funktioniert.
Grüße,
Marion
你好 Marion,
Nach einer Umstellung von Suse9.1 auf Suse9.2 und den damit verbundenen
neuen Perl-Modulen XML,DOM,Parser funktioniert komischerweise die
Umlaut-Darstellung nicht mehr.Was heisst „funktioniert nicht mehr“?
Also Wörter wie "Bücher" werden nun falsch dargestellt.
Falsch? Inwiefern? Was ist falsch?
再见,
克里斯蒂安
你好 Marion,
Ich verstehe bloß nicht, dass es nun statt z.B. Bücher folgendermaßen
dargestellt wird: Bücher
XML-Parser arbeiten intern fast alle mit UTF-8. D.h. die XML-Datei wird
eingelesen und dabei (oder danach oder währenddessen) werden die Text-Daten
umgewandelt nach UTF-8. Das wird gemacht, um einen einheitlichen Charset
aus Programmierer-Sicht zu haben. XML-Dateien erlauben ja, dass man nahezu
beliebige Charsets benutzt (auch wenn ein XML-Parser nur UTF-8 und UTF-16
implementieren muss). Wenn der XML-Parser diese Umformung nicht machen
würde, müsste der Anwendungsentwickler sich mit zig unterschiedlichen
Encodings rumnerven…
Kurz gesagt: XML::DOM wandelt zu deiner Entlastung den Input um in UTF-8.
再见,
克里斯蒂安
Verstehe aber immer noch nicht, warum es vorher ging und jetzt nicht mehr......
Bitte weiter um Hilfe....
Gruß,
Marion
Hallo Marion,
Verstehe aber immer noch nicht, warum es vorher ging und jetzt nicht mehr......
In der vorigen Version hat das der Parser wohl noch nicht gemacht.
Bitte weiter um Hilfe....
Wobei denn? Die Situation sieht aktuell so aus: Der Parser liefert Dir UTF-8 zurück, egal, wie der Inhalt der Seite aussieht. Wenn Du kein UTF-8 willst, dann kannst Du den Text bspw. per Iconv konvertieren (Text::Iconv muss installiert sein):
use Text::Iconv;
$converter = Text::Iconv->new("UTF-8", "ISO-8859-1");
$converted = $converter->convert($text_in_utf8);
Viele Grüße,
Christian
So Problem gelöst....
Lösung:
Update auf die neueste Parser-Version und schon geht wieder alles....
So einfach ist manchmal die Lösung.
Danke trotzdem für die Vorschläge.
Allerdings waren das Vorschläge, die ich nicht ganz nachvollziehen kann.
1. Es ging ja vorher auch schon, also warum irgendwas konvertieren
2. Der Parser liefert ganz normal "ISO-8859-1" und nicht "UTF-8" da man es im Kopf einer XML-Datei einstellen kann......
Aber trotzdem Danke für die Hilfe....
Grüße,
Marion