Textersetzung in Perl: Malformed UTF-8

  • Ich will im Perl-Script von tvmovie2vdr die Titel einiger Serien ändern bzw. die unterschiedlichen Seriennamen verschiedener Sender vereinheitlichen. Sonst funktioniert das mit dem Wiederholung vermeiden im epgsearch-Plugin nicht.


    Leider habe ich nicht sonderlich viel Ahnung von Perl. Kurz bevor in /usr/bin/tvm2vdr die Daten nach epg.data geschrieben werden [ WriteEPG("T $tline"); ] habe ich einige Textersetzungen eingefügt, zum Beispiel:


    Code
    $tline =~ s/Tagesschau/Schnöde Nachrichten/i ;

    Leider gibt es dabei zwei Probleme:


    1.)
    Im obigen Beispiel wird aus Tagesschau jetzt "Schnöde Nachrichten", das ö wird also nicht korrekt übersetzt. Unbehandelte Daten werden korrekt auch mit Umlauten ins epg geschrieben.


    2.)
    Auch wenn das Pattern oder die Ersetzung keine Umlaute u.ä. enthalten hagelt es Fehler nach dem Muster:


    Code
    Malformed UTF-8 character (unexpected end of string) in substitution (s///) at /usr/bin/tvm2vdr line 244, <GEN104> line 56.
    Malformed UTF-8 character (unexpected end of string) in substitution (s///) at /usr/bin/tvm2vdr line 245, <GEN104> line 56.
    Malformed UTF-8 character (unexpected end of string) in substitution (s///) at /usr/bin/tvm2vdr line 246, <GEN104> line 56.
    Malformed UTF-8 character (unexpected end of string) in substitution (s///) at /usr/bin/tvm2vdr line 247, <GEN104> line 56.

    Beim googlen bin ich auf so Sachen wie utf8::encode oder utf8:upgrade gestoßen, weiß aber nicht so recht, wie ich das in die substitution einbauen soll, ohne für jeden Serientitel drei Perlzeilen zu produzieren.


    locales und vdr_lang stehen jeweils auf: de_DE.ISO-8859-15@euro
    perl ist Version 5.8.8

    Debian Squeeze Bullseye mit vdr 1.7.18 2.6.0-1~etobi1 e-tobi/multipatch, AMD Phenom-CPU, 4 GB RAM, Technotrend S2-6400, Digital Devices Cine S2 V6, 2 TByte HDD für Videodaten.

    Einmal editiert, zuletzt von HolgerAusB ()

  • Es würde mich immer noch interessieren, wie ich das anstellen müsste.


    Zwischenzeitlich habe ich die Ersetzungsbefehle in das tvmoviefetch-Teilscript verlegt. Dort funktioniert das dann einwandfrei. Das ö landet in der epg.data und es kommen auch keine Malformed-Fehler mehr.

    Debian Squeeze Bullseye mit vdr 1.7.18 2.6.0-1~etobi1 e-tobi/multipatch, AMD Phenom-CPU, 4 GB RAM, Technotrend S2-6400, Digital Devices Cine S2 V6, 2 TByte HDD für Videodaten.

  • Hi,


    so wie es aussieht, versuchst Du ein utf8-ö durch ein ascii-ö oder umgekehrt zu ersetzen. Das kann so nicht klappen, der Character-Code ist verschieden.
    Du kannst im vi das Encoding setzen, mit welchen eine Datei editiert wird.
    Mit :set encoding kannst Du Dir anschauen, welche Codierung gerade verwendet wird, mit :set encoding=utf-8 z.B. kannst Du die Codierung umsetzen.
    Ich würde sagen, sowohl die Daten, die Du ändern möchtest als auch das Perlscript sollten die gleicheCodierung haben.


    Gruß Doc_Hollywood

    Current:

    Hardware_: Gigabyte B360M D3H, Silverstone Milo ML03, DD Cine S2 V7A, 256GB Samsung EVO 970, 4GB RAM, ASUS GT1030 passive

    Software_: ArchLinux, VDR4Arch, VDR 2.4.0, softhdcuvid, nordlichtsepg, skinenigmang


  • Zitat

    Original von Doc_Hollywood
    ascii-ö


    Also DAS existiert net ;)


    Man kann allerdings iso-8859-1 nehmen (oder auch iso-8859-15 oder cp1252, die haben das ö alle an der gleichen Stelle *g*)


    Wenn schon vim: Interessant ist neben "encoding" vor allem noch die Option "file-encoding". Wenn die auf einen anderen Wert gesetzt ist, als "encoding", wird das File beim lesen und schreiben passend konvertiert.


    Grüße, Felix

    Asrock A75 Pro4-M
    Debian wheezy (testing, stock) (aktuell 2012-08-24: Linux 3.2, VDR 1.7.28)
    vdr-sxfe (xineliboutput)
    Pioneer VSX-520-K

  • Zitat

    Also DAS existiert net ;)


    Uups, hast ja Recht... Und eigentlich weiß ich es auch :)


    Gruß Doc_Hollywood

    Current:

    Hardware_: Gigabyte B360M D3H, Silverstone Milo ML03, DD Cine S2 V7A, 256GB Samsung EVO 970, 4GB RAM, ASUS GT1030 passive

    Software_: ArchLinux, VDR4Arch, VDR 2.4.0, softhdcuvid, nordlichtsepg, skinenigmang


  • Ich bin jetzt gerade nicht @home, allerdings habe ich das Gefühl, dass die EPG-Daten zwischen den Teilscripten irgendwo von iso-8859-1 nach utf-8 (für vdr) konvertiert werden. Da das Script vermutlich iso-8859-1(5) ist, führt meine obige Textersetzung zum Fehler.


    Wie gesagt, nachdem ich die Textersetzung jetzt früher, also vor der Konvertierung vornehme, klappt jetzt alles.


    Ich würde halt rein aus Interesse gerne wissen, wie ich hier hätte vorgehen können. Zum Beispiel Muster und Ersetzung vorher in Skalare einlesen und konvertieren. Am liebsten natürlich das ganze in einer Zeile...

    Debian Squeeze Bullseye mit vdr 1.7.18 2.6.0-1~etobi1 e-tobi/multipatch, AMD Phenom-CPU, 4 GB RAM, Technotrend S2-6400, Digital Devices Cine S2 V6, 2 TByte HDD für Videodaten.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!