Anzeige:
Ergebnis 1 bis 14 von 14

Thema: Mit Perl deutsche Umlaute ersetzen

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Registrierter Benutzer
    Registriert seit
    28.10.2006
    Beiträge
    34

    Mit Perl deutsche Umlaute ersetzen

    Hallo,

    ich versuche gerade mit einem kleinen Perscript in einer Textdatei alle Umlaute zu ersetzen. Doch leider ignoriert das Pattern Matching sämtliche Umlaute.
    Beispiel:
    Code:
    $Text =~ s/ä/ae/g;
    $Text =~ s/ö/oe/g;
    $Text =~ s/ü/üe/g;
    $Text =~ s/Ä/Ae/g;
    $Text =~ s/Ö/Oe/g;
    $Text =~ s/Ü/Ue/g;
    $Text =~ s/ß/sz/g;
    Wenn ich andere Zeichen als Muster eingebe, dann funktioniert die Substitution problemlos.

    Grüße.
    craano.

  2. #2
    Registrierter Benutzer
    Registriert seit
    28.10.2006
    Beiträge
    34
    Edit: Unsinn Gepostet.
    Geändert von craano (19-02-2007 um 11:27 Uhr)

  3. #3
    Registrierter Benutzer
    Registriert seit
    28.10.2006
    Beiträge
    34
    Ich poste hier mal den gesamten Code - Abschnitt.
    Ich denke mittlerweile, dass die Daten schon beim einlesen falsch interpretiert werden.
    Code:
    my $i = 0;
    my $Text;
    
    find(\&wanted, '/home/craano/Desktop/Musik');
    sub wanted { 
    
        
            if (m/mp3/ || m/MP3/){
            $i++;
            my $mp3 = MP3::Tag->new($_);
            $mp3->config("autoinfo","ID3v1","ID3v2");
            my ($title, $track, $artist, $album, $comment, $year, $genre) = $mp3->autoinfo();
            $Text = $i." ; ".$artist." ; ".$album." ; ".$track." ; ".$title." ; ".$year." \n";
    
    $Text =~ s/ä/ae/g;
    $Text =~ s/ö/oe/g;
    $Text =~ s/ü/ue/g;
    $Text =~ s/Ä/Ae/g;
    $Text =~ s/Ö/Oe/g;
    $Text =~ s/Ü/Ue/g;
    $Text =~ s/ß/sz/g;
    
    print $Text;
            }    
    }
    Die Ausgabe von print ist verunstaltet. Jeder Umlaut wird so dargestellt. " � ". Eine weitere sinnvolle Verwendung von $Text ist so leider nicht möglich.

    Ich hoffe jemand von Euch hat noch eine Idee.

    Wenn ich die Ausgabe in eine Datei pipe, dann kann ein Editor (gedit) die Sonderzeichen darstellen! Ein less "datei" zeigt mir die Sonderzeichen nicht an, sondern substituiert diese. Ein "ö" wird zu <F6> und ein "ä" wird als <E4> angezeigt.

    Was bedeutet das. Wie bekomme ich die Umlaute auf der Shell richtig angezeigt, dass ist nötig, weil ich aus diesen Informationen Dateinamen generieren will, das ist ohne richtige Sonderzeichen wenig sinnvoll.

    btw: Wenn ich direkt ein
    Code:
    print "äöü";
    ausgeben lasse, dann werden die Zeichen auch in der Shell richtig dargestellt.

    Grüße.
    craano.
    Geändert von craano (19-02-2007 um 12:44 Uhr)

  4. #4
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Ist sehr wahrscheinlich ein Editor Zeichensatz Problem.
    * In welchen Format wird gespeichert?
    * Ist das Format Identisch mit der meiner Umgebung. export -p | grep LC
    * Wie kann ich Umwandeln iconv --help
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  5. #5
    Registrierter Benutzer
    Registriert seit
    28.10.2006
    Beiträge
    34
    Habe mittlerweile die Lösung.

    use utf8;
    utf8::encode($_);
    bzw
    utf8::decode($_);


    lassen die Umlaute unverstümmelt erscheinen.

    Grüße.
    craano.

  6. #6
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Dann fängt aber das Drama an.
    Wann ist es ein utf8 und wann nicht
    Ein Work Arround wäre.
    PHP-Code:
    my $str;
    my $check utf8::encodeutf8::decode($_) );
    if ( 
    $check == $_ )
      
    $str $_;
    else
      
    $str utf8::encode$_ ); 
    Es ist Besser du versuchst von Anfang an einen Einheitlichen Zeichensatz zu haben. Sonst wirst du immer wieder das Problem haben.
    Geändert von undefined (23-02-2007 um 07:01 Uhr) Grund: lingua
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

Lesezeichen

Berechtigungen

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