UnicodeEncodeError auf Linux

  • nach eigenen Versuchen: ich denke, dass Problem läst sich nur lösen, indem die gesamte Playlist-Quelle aus deinem Beispiel (Kodierung IBM852) mit einem geeigneten Editor nach Unicode (utf-8) vor der weiteren Verarbeitung übersetzt wird. Selbst wenn man die Kodierhürde überwindet und einen Dateinamen mit Sonderzeichen erzeugt, scheitert Kodi beim Einlesen mit dem bekannten Error surrogates not allowed.
    Ich weiß allerdings nicht, ob ich die Fallkonstellation wirklich verstanden habe (Erzeugung einer neuen Playlist, welche der Kodi-Player aus einer Playlist-Quelle abspielt).
    /R

  • Die surrogate-Geschichte ist für mich auch neu. Neben surrogateescape gibt es noch Ansätze per surrogatepass. Evtl. das mal versuchen.

    https://stackoverflow.com/questions/3189…surrogateescape

    2. Antwort.

    AZi (DEV): Nexus auf LibreElec | Asrock J4205 | 4 GB RAM | 128 GB Sandisk| Rii mini
    DEV: PC Ubuntu 20.04 | Matrix
    AZi: Tanix TX3 | Android/CoreElec Dualboot (EMMC), Nexus
    WoZi: Nexus auf LibreElec | Asrock J4205 | 4GB RAM | 128 GB Sandisk SSD | Atric IR | URC7960
    NAS: unRaid, 3x6TB, 2x12TB | TV-Server: Futro S550 mit Hauppauge QuadHD DVB-C
    PayPal: paypal.me/pvdbj1

  • Die surrogate-Geschichte ist für mich auch neu. Neben surrogateescape gibt es noch Ansätze per surrogatepass. Evtl. das mal versuchen.

    prima Hinweis. Den Link habe ich für ähnliche Spezialfälle gleich gespeichert, zusammen mit den Codec-Details und Tabellen in https://docs.python.org/3/library/code…ec-base-classes. Edit: persönlich würde ich aber (aus leidvoller Erfahrung) versuchen, das Problem soweit möglich zu umgehen.
    /R

  • bin grad etwas abgelenkt, wegen Family, melde mich Sonntag.

    Im Grunde geht es hierbei um eine Weiterentwicklung dieses addons:
    https://forum.kodi.tv/showthread.php?tid=109310

    Mit einer m3u erspart man sich die ganzen Zusatzinfos wegzuspeichern und wieder zurück zu schreiben. Die "Special-Tags" sind nur, um den Player noch zur richtigen Trackposition und Zeit zu bewegen.
    In Kodi 18 lief das echt gut.

  • nach eigenen Versuchen: ich denke, dass Problem läst sich nur lösen, indem die gesamte Playlist-Quelle aus deinem Beispiel (Kodierung IBM852) mit einem geeigneten Editor nach Unicode (utf-8) vor der weiteren Verarbeitung übersetzt wird.

    Das finde ich eine gute und einfache Lösung. So ganz klar ist mir auch nicht, was eingelesen wird - schon existierende Playlisten oder tatsächlich Dateinamen direkt aus dem Dateisystem?

    Neben surrogateescape gibt es noch Ansätze per surrogatepass. Evtl. das mal versuchen.

    Das wird nicht funktionieren. Am Binärcode sieht man eindeutig, dass das keine gültigen Unicode Surrogate sind. Die Fehlermeldung haut Python nur raus, weil ihm gesagt wurde, dass das UTF-8 sein muss und es keinen gültigen UTF-8 Zeichencode findet.

    mCubed HFX Mini, Asus M4A87TD EVO, i3-4330, TBS 6285, Xbox One Digital TV Tuner, Y.A.R.D.2 OLED Special Edition, Pulse8 USB - CEC Adapter, Kodi v19, Tvheadend 4.2, Debian 11

  • einen Versuch ist es wert. Ich nutze xbmcvfs.File seit 2020 wegen Codec-Problemen zum Check der addon.xml:

    /R

  • Hat etwas gedauert, aber leider ohne Erfolg.
    Dabei kommt sogar eine weniger eindeutige Fehlermeldung:

  • ich fürchte wir kommen hier nicht weiter, wenn wir nicht den gesamten Verarbeitungsweg nachvollziehn können. Könntest du beschreiben, aus welcher Quelle xbmc.Player seine Daten bezieht, bevor dein Testscript via PlayList(0) die Daten in das neu geöffnete ADDON_M3UFILE schreibt? Wenn es sich um eine Datei handelt, könntest du sie uns für eigene Tests hier zur Verfügung stellen (mit Info zum Betriebs- und Dateisystem)?
    /R

  • System:
    osmc für Raspberry 3, sollte Debian Buster sein,
    oder aktuelles Libreelec für den Rasp 3. Was für Linux das ist, weiß ich nicht.

    Quelle:
    z.B.: "/home/osmc/music"
    Also einfach die Wiedergabe der Datei starten. Kodi erzeugt selbst die Wiedergabeiste. Den String des Dateinamens erzeugt Kodi, wenn es die Tracks gerade abspielt. Es ist die Kodi eigene Wiedergabeliste. Wie/Was Kodi genau macht müsste man wohl dem Source entnehmen.

    Testmusiktracks:
    Es gehört nicht viel dazu, einfach ein paar Sonderzeichen in den Dateiname ergänzen. https://drive.google.com/drive/folders/…yOf?usp=sharing

    TestAddon:
    siehe Zip im Anhang

  • @harryberlin: ergänzende Frage: würde denn etwas dagegensprechen, in den vom Kodi-Player generierten Pfaden die Sonderzeichen zu entfernen? Oder soll der Songtitel unbedingt unverändert bleiben?
    Zum Beispiel dein Songtitel Lensko - Let_s Go! [NCS Release].mp3: würde hier ein Ersatz von '!','[', ']' durch Leerzeichen oder Unterstriche nicht ausreichen?
    /R

  • @harryberlin: ergänzende Frage: würde denn etwas dagegensprechen, in den vom Kodi-Player generierten Pfaden die Sonderzeichen zu entfernen? Oder soll der Songtitel unbedingt unverändert bleiben?
    Zum Beispiel dein Songtitel Lensko - Let_s Go! [NCS Release].mp3: würde hier ein Ersatz von '!','[', ']' durch Leerzeichen oder Unterstriche nicht ausreichen?
    /R

    das addon ist für die allgemeinheit gedacht, kann entsprechend nicht verlangen, dass die dateien umbenannt werden, oder gar andere sprachen (z.B. chinesische zeichen) ignoriert werden.

    edit:
    Andernfalls eröffne ich ein issue in der xbmc github site.

  • das addon ist für die allgemeinheit gedacht, kann entsprechend nicht verlangen, dass die dateien umbenannt werden, oder gar andere sprachen (z.B. chinesische zeichen) ignoriert werden.

    ich bin skeptisch, ob das klappt - aber schauen wir mal was Python her gibt..
    /R

  • ERROR <general>: EXCEPTION: Unknown exception thrown from the call "write"


    Verwendest du da dieses XBMCAddon::xbmcvfs::File ? Besser wieder zum ursprünglichen Code zurückgehen, sieht nämlich so aus, als ob diese File Klasse die eigentliche Exception abfängt und, statt sie auszugeben, diesen nutzlosen Kram druckt. Oder du wirfst den Debugger an und schaust dir an, was innerhalb der Klasse zur Laufzeit passiert.

    mCubed HFX Mini, Asus M4A87TD EVO, i3-4330, TBS 6285, Xbox One Digital TV Tuner, Y.A.R.D.2 OLED Special Edition, Pulse8 USB - CEC Adapter, Kodi v19, Tvheadend 4.2, Debian 11

  • Zwischenergebnis: wenn Quelle + Ziel auf dem selben Dateisystem liegen und dieses auch von Kodi genutzt wird, läuft dein Script.
    Die Datei "äöüüäDiviners feat. Contacreast - Tropic Love [NCS Release].mp3" wird vom Player ohne Error gestartet und dein Test-Script erzeugt bei der Markierung "#PLAYING::" den identischen Dateinamen.
    Deine Logausgabe erzeugt: "äöüüäDiviners feat. Contacreast - Tropic Love [NCS Release].mp3" - ohne surrogateescape sogar identisch mit dem Original.

    Wie schon vermutet, hängt's wohl an der unterschiedlichen Kodierung bei OS-/Filessystem-übergreifender Verwendung.
    Bisherige Testumgebung: OS Linux Leap 15.3, Filessystem ext4.
    Nächste Testumgebung Linux/Windows - kann etwas dauern. (Edit: muss noch eine neue VM einrichten).

    Frage zu deinem Hinweis "In Kodi 18 lief das echt gut": da wurde die identische Fallkonstallation verwendet?
    /R

  • Zwischenergebnis2: hier klappte allerdings der Test auf meinem Raspi 3b+ (LibreElec 10.0., Kodi Matrix 19.4.0). Dabei spielte der Player die äöüüä-Datei von einem ext4-Verzeichnis ab, eingebunden via smb. Von dort lässt sich die erzeugte testscript.m3u auch nutzen (laden + Abspielen der Tracks durch den Player, siehe Bild).
    Edit 08.09.2022: ergänzender Zusatz-Test mit dieser Datei von einem lokalen Verzeichnis - ebenfalls OK, einschl. Abspielen der erzeugten testscript.m3u

    Log:

    erzeugte testscript.m3u:


    Bisher kann ich also das UnicodeEncodeError-Problem noch nicht nachvolziehen. Der nächste Schritt ist dann - wie ursprünglich geplant - der Zugriff auf ein Windows-Verzeichnis. Dort rechne ich mit dem Auftreten von Errors.

Jetzt mitmachen!

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