Marion Schuhmann: XML::DOM::Parser hat Probleme mit Umlauten

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

  1. 你好 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?

    再见,
     克里斯蒂安

    --
    Neuer alter Plasma-Bildschirm | Meine Schultüte
    <Henryk> Those who didn't understand (email,usenenet,...) are doomed to reinvent ist. Poorly.
    http://wwwtech.de/
    1. 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&amp;aktion=anmeldung&amp;ben_typ=autor" availableIf="abgemeldet" availableFor="alle"></submenu_level0>
           <submenu_level0 text="Redakteur" link="uni.pl?fenster=popup&amp;aktion=anmeldung&amp;ben_typ=redakteur" availableIf="abgemeldet" availableFor="alle"></submenu_level0>
           <submenu_level0 text="Administrator" link="uni.pl?fenster=popup&amp;aktion=anmeldung&amp;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?

      再见,
      克里斯蒂安

      1. 你好 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.

        再见,
         克里斯蒂安

        1. Verstehe aber immer noch nicht, warum es vorher ging und jetzt nicht mehr......

          Bitte weiter um Hilfe....

          Gruß,
          Marion

          1. 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

            1. 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