Take: Problem mit Zeichenkodierungen

Moin,

habe mal wieder ein Problem, das Thema ist eigentlich XML _und_ Perl, naja, Programmiertechnik tuts auch.

Ich bin dabei, auf meiner Seite oben ein Feld einzubauen, wo zufällige Sprüche erscheinen. Diese stehen in einer XML-Datei. Jetzt gibt es ein Perl-Script, welches per XML::Parser aus dieser XML-Datei die Sprüche einliest. Die Ausgabe des Scripts ist hier zu finden. Später wird dieses dann per SSI in die Startseite eingebunden. Alle Dateien sind als UTF-8 kodiert. In der XML-Datei auftauchende Umlaute werden jetzt aber als ISO-8859-1 ausgegeben! Wenn die Umlaute direkt in der Perl-Datei stehen (print "ää";) kommen sie richtig an. Jemand eine Idee, woran das liegen könnte?

Gruß,
Take

  1. Wenn die Umlaute direkt in der Perl-Datei stehen (print "ää";) kommen sie richtig an. Jemand eine Idee, woran das liegen könnte?

    Die Perl Datei ist nicht in utf-8 abgespeichert.

    Struppi.

    1. Moin,

      Wenn die Umlaute direkt in der Perl-Datei stehen (print "ää";) kommen sie richtig an. Jemand eine Idee, woran das liegen könnte?

      Die Perl Datei ist nicht in utf-8 abgespeichert.

      Eben doch.

      Screenshot

      Wenn nicht, würden ja die Umlaute, die direkt im Perl-Script stehen, (die letzen 3 "Ä"s) verstümmelt und nicht die, die aus der XML-Datei kommen.

      Struppi.

      Gruß,
      Take

      1. hi,

        Die Perl Datei ist nicht in utf-8 abgespeichert.

        dachte ich auch.

        Eben doch.

        Dann gehe mal systematisch vor, lass das Perl-Script einmal nur den print "AAA" ausgeben und ein andermal das XML-Geparste.

        Hotti

        1. Moin,

          hi,

          Die Perl Datei ist nicht in utf-8 abgespeichert.

          dachte ich auch.

          Eben doch.

          Dann gehe mal systematisch vor, lass das Perl-Script einmal nur den print "AAA" ausgeben und ein andermal das XML-Geparste.

          Nur XML: immernoch verstümmelt.
          Nur print "ÄÄÄ": nicht verstümmelt.

          Es liegt daran, dass XML::Parser die Daten falsch zurückgibt, aber warum?!?

          Hotti

          Gruß,
          Take

          1. hi,

            Es liegt daran, dass XML::Parser die Daten falsch zurückgibt, aber warum?!?

            Parst der byte-weise oder zeichenweise? Probier mal:
            use utf8;

            Hotti

            1. Moin,

              hi,

              Es liegt daran, dass XML::Parser die Daten falsch zurückgibt, aber warum?!?

              Parst der byte-weise oder zeichenweise?

              _So_ viel Ahnung hab ich nun auch nicht...

              Probier mal:
              use utf8;

              Bring nix.

              use Encode; kenn ich besser, ich machs jetzt also so:

              encode($sprueche[$num]);

              Gefällt mir zwar nicht besonders, tut aber seinen Dienst.

              Dankeschön, hast mich auf den richtigen Pfad gebracht.

              Hotti

              Gruß,
              Take

              P.S.: Deine passwortgeschützte Seite zu verlinken bring nicht sehr viel ;)

              1. hi,

                Dankeschön, hast mich auf den richtigen Pfad gebracht.

                jow, guck nochmal in das Modul rein. Da gibts z.B. ein Schlüsselwort für das Parserobjekt: ProtocolEncoding

                P.S.: Deine passwortgeschützte Seite zu verlinken bring nicht sehr viel ;)

                Doch: mein Index in den Suchmaschinen bleibt solange erhalten, bis ich wieder richtig Zeit habe, alles neu aufzubauen.

                Hotti

  2. Moin,

    habs jetzt gelöst: das XML-File brauchte ein BOM, damit der Parser weiß, dass es UTF-8 ist, das encoding in der xml-Deklaration ignoriert er. Was ein blöder Fehler...

    Gruß,
    Take

    1. @@Take:

      nuqneH

      habs jetzt gelöst: das XML-File brauchte ein BOM, damit der Parser weiß, dass es UTF-8 ist, das encoding in der xml-Deklaration ignoriert er. Was ein blöder Fehler...

      Nicht deiner, sondern der des Parsers.

      Qapla'

      --
      Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
      (Mark Twain)
    2. habs jetzt gelöst: das XML-File brauchte ein BOM, damit der Parser weiß, dass es UTF-8 ist, das encoding in der xml-Deklaration ignoriert er. Was ein blöder Fehler...

      Hmm? Ich hab mal dein Beispiel nachgebaut und kann das Problem jetzt nachvollziehen. Aber bei mir ändert auch eine BOM nichts an dem Verhalten.

      XML::Parser gibt immer ISO Zeichen weiter, egal wo und wie ich die Kodierung angebe. Das kann doch nicht sein?

      In allen Dokus und Artikeln, die ich gefunden habe, steht, dass das Modul per Default alles als utf-8 ausgibt. Was bei mir definitiv nicht der Fall ist

      Struppi.