Anzeige:
Ergebnis 1 bis 5 von 5

Thema: encoding problem in perl

  1. #1
    Registrierter Benutzer
    Registriert seit
    08.02.2005
    Beiträge
    40

    encoding problem in perl

    Hi,

    ich habe ein kleines encoding problem mit dem XML::RSS Module. Ich versuche einen RSS feed mit Japanischen Zeichen zu erstellen. In dem Script kann ich die Japanischen Zeichen normal benutzen, aber sobald ich diese an XML:RSS uebergebe, dann kommt nur noch was komisches bei herraus:

    beispiel script:
    Code:
    #!/usr/bin/perl
    
    use utf8;
    use XML::RSS;
    use Encode qw/encode decode/;
    
    
    my $name="メール";
    my $title="どこでも";
    
    
    print "$name ----- $title\n";
    
    my $rss = XML::RSS->new(version=>'2.0');
    $rss->channel(
       title        => "$name",
       link         => "http://link.com",
       language     => "ja",
       description  => "$name",
       pubDate        => 'Thu, 23 Aug 1999 07:00:00 GMT',
       lastBuildDate  => 'Thu, 23 Aug 1999 16:20:26 GMT',
    
     );
    
    
    my $check = utf8::valid($name);
    print "is utf valild?: $check\n";
    
    $rss->add_item(title => "$name",
                   link  => "http://link.com",
                   mode  => 'insert'
                   );
    
    
    print $rss->as_string;
    $rss->save("test.xml");
    und das Ergebniss:
    Code:
    メール ----- どこでも
    is utf valild?: 1
    <?xml version="1.0" encoding="UTF-8"?>
    
    <rss version="2.0"
     xmlns:blogChannel="http://backend.userland.com/blogChannelModule"
    >
    
    <channel>
    <title>&#x30E1;&#x30FC;&#x30EB;</title>
    <link>http://link.com</link>
    <description>&#x30E1;&#x30FC;&#x30EB;</description>
    <language>ja</language>
    <pubDate>Thu, 23 Aug 1999 07:00:00 GMT</pubDate>
    <lastBuildDate>Thu, 23 Aug 1999 16:20:26 GMT</lastBuildDate>
    
    <item>
    <title>&#x30E1;&#x30FC;&#x30EB;</title>
    <link>http://link.com</link>
    </item>
    </channel>
    </rss>
    Weiss einer was XML:RSS falsch macht oder warum der das umkodiert?

    Danke! && MfG bert2002

  2. #2
    Registrierter Benutzer Avatar von Molaf
    Registriert seit
    15.11.2004
    Beiträge
    127
    Hallo Bert,

    ich habe auch regelmäßig das Problem mit utf8 und encode.

    Oft liegt es am Texteditor, der eben nicht in utf-8 speichert (von notepad++ gespeichert dann in geany weiterverarbeitet und umgekehrt).

    Meine erster Versuch ist dann ein Auskommentieren von use utf8; , das bringt meistens den Erfolg (wenn schon Auskommentiert, dann umgekehrt).

    Klingt nicht sehr wissenschaftlich aber utf8 ist ja auch noch jünger als 20 Jahre, von daher kann man nicht mit einer stabilen Umsetzung rechnen .

    Gruß,
    Molaf

  3. #3
    Registrierter Benutzer
    Registriert seit
    08.02.2005
    Beiträge
    40
    Zitat Zitat von Molaf Beitrag anzeigen
    Hallo Bert,

    ich habe auch regelmäßig das Problem mit utf8 und encode.

    Oft liegt es am Texteditor, der eben nicht in utf-8 speichert (von notepad++ gespeichert dann in geany weiterverarbeitet und umgekehrt).

    Meine erster Versuch ist dann ein Auskommentieren von use utf8; , das bringt meistens den Erfolg (wenn schon Auskommentiert, dann umgekehrt).

    Klingt nicht sehr wissenschaftlich aber utf8 ist ja auch noch jünger als 20 Jahre, von daher kann man nicht mit einer stabilen Umsetzung rechnen .

    Gruß,
    Molaf
    Das ist leider nicht die Loesung des Problemes

  4. #4
    Registrierter Benutzer Avatar von Molaf
    Registriert seit
    15.11.2004
    Beiträge
    127
    Ups...

    Schande über mich, ich habe Deine Code- und Ausgabe-Beispiele nur überflogen und gleich meinem utf8-Beissreflex nachgegeben.

    Das RSS ist valides XML und da sind Sonderzeichen (quasi alles außer ASCII aus amerikanischer Sicht) eben maskiert.

    Dieses Testprogramm hier läd das RSS wieder und prüft dann den Inhalt erneut - valides utf8-Zeichen.

    Somit ist alles in Ordnung mit dem RSS (wenn ich diesmal genau aufgepasst habe ).

    Code:
    #!/usr/bin/perl
    
    use strict;
    
    use utf8;
    use Encode qw/encode decode/;
    
    use XML::Simple;
    
    # RSS wieder einlesen
    my $tree = XMLin("test.xml");
    # Eingabewert wieder holen
    my $name = $tree->{channel}{title};
    
    # kurze Kontrolle
    print length($name),"\n";
    # (die Zeichen werden in der Windowskonsole eh nicht angezeigt)
    
    my $check = utf8::valid($name);
    print "is utf valild?: $check\n";

  5. #5
    Registrierter Benutzer
    Registriert seit
    08.02.2005
    Beiträge
    40
    Zitat Zitat von Molaf Beitrag anzeigen
    Ups...

    Schande über mich, ich habe Deine Code- und Ausgabe-Beispiele nur überflogen und gleich meinem utf8-Beissreflex nachgegeben.

    Das RSS ist valides XML und da sind Sonderzeichen (quasi alles außer ASCII aus amerikanischer Sicht) eben maskiert.

    Dieses Testprogramm hier läd das RSS wieder und prüft dann den Inhalt erneut - valides utf8-Zeichen.

    Somit ist alles in Ordnung mit dem RSS (wenn ich diesmal genau aufgepasst habe ).

    Code:
    #!/usr/bin/perl
    
    use strict;
    
    use utf8;
    use Encode qw/encode decode/;
    
    use XML::Simple;
    
    # RSS wieder einlesen
    my $tree = XMLin("test.xml");
    # Eingabewert wieder holen
    my $name = $tree->{channel}{title};
    
    # kurze Kontrolle
    print length($name),"\n";
    # (die Zeichen werden in der Windowskonsole eh nicht angezeigt)
    
    my $check = utf8::valid($name);
    print "is utf valild?: $check\n";
    Ja da hast du vollkommen recht. Was ich bemerkt habe ist das XML::RSS genau richtig encoded, aber genau das wollte ich nicht Mit der Option "encode_output=>'0'" kann man es deaktivieren.

    Danke fuer den ausschlaggebenden Hinweis.

    Danke! && MfG bert2002

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •