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
UnicodeEncodeError auf Linux
-
harryberlin -
31. August 2022 um 20:07 -
Unerledigt
-
-
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.
-
-
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=109310Mit 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.
-
damt probiere ich es
mal noch, vllt. geht es mit Kodi-Hausmitteln besser:
https://codedocs.xyz/AlwinEsch/kodi/group__python__file.html -
-
einen Versuch ist es wert. Ich nutze xbmcvfs.File seit 2020 wegen Codec-Problemen zum Check der addon.xml:
Code
Alles anzeigendef check_AddonXml(mark): ADDON_XML = os.path.join(ADDON_PATH, "addon.xml") xbmc.[definition='1','0']log[/definition]("%s --> %s" % ('ARDundZDF', 'check_AddonXml:'), LOG_MSG) f = xbmcvfs.File(ADDON_XML) # Byte-Puffer xml_content = f.readBytes() f.close() if mark in str(xml_content): ADDON_DATA = os.path.join("%s", "%s", "%s") % (USERDATA, "addon_data", ADDON_ID) return True else: return False
/R
-
Hat etwas gedauert, aber leider ohne Erfolg.
Dabei kommt sogar eine weniger eindeutige Fehlermeldung:Code
Alles anzeigen2022-09-01 18:15:24.931 T:865 ERROR <general>: EXCEPTION: Unknown exception thrown from the call "write" 2022-09-01 18:15:25.001 T:865 ERROR <general>: EXCEPTION Thrown (PythonToCppException) : -->Python callback/script returned the following error<-- - NOTE: IGNORING THIS CAN LEAD TO MEMORY LEAKS! Error Type: <class 'RuntimeError'> Error Contents: Unknown exception thrown from the call "write" Traceback (most recent call last): File "/home/osmc/.kodi/addons/plugin.script.test/testscript.py", line 115, in <module> main() File "/home/osmc/.kodi/addons/plugin.script.test/testscript.py", line 72, in main m3ufile.write('#EXTINF:0,%s\n' % temp) RuntimeError: Unknown exception thrown from the call "write" -->End of Python script error report<--
-
-
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=sharingTestAddon:
siehe Zip im Anhang -
-
@harryberlin: OK, danke - ich versuche mal mein Glück..
/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 -
-
-
@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?
/Rdas 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. -
-
bin wieder zurück gegangen.
-
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 -
-
habs auf nen Debian Buster in der VBox getestet, dort läuft es auch fehlerfrei.
Es scheint nur auf den Raspberrysystemen nicht zu funktionieren.hast du mal versucht die m3u in Kodi zu laden, ob dann die Tracks abgespielt werden?
-
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.m3uLog:
Code
Alles anzeigen2022-09-08 06:57:16.185 T:29360 INFO <general>: PAPlayer::PrepareStream - Ready 2022-09-08 06:57:29.477 T:29456 INFO <general>: initializing python engine. 2022-09-08 06:57:29.774 T:29456 INFO <general>: plugin.script.test: SRV: DEBUG: writing m3u tracks started 2022-09-08 06:57:29.779 T:29456 INFO <general>: plugin.script.test: SRV: DEBUG: #EXTINF:0,äöüüäDiviners feat. Contacreast - Tropic Love [NCS Release].mp3 2022-09-08 06:57:29.793 T:29456 INFO <general>: plugin.script.test: SRV: DEBUG: smb://192.168.0.100/tmp-rols1/Austausch/00/äöüüäDiviners feat. Contacreast - Tropic Love [NCS Release].mp3 2022-09-08 06:57:29.808 T:29456 INFO <general>: plugin.script.test: SRV: DEBUG: #EXTINF:0,Disfigure - Blank [NCS Release].mp3 2022-09-08 06:57:29.821 T:29456 INFO <general>: plugin.script.test: SRV: DEBUG: smb://192.168.0.100/tmp-rols1/Austausch/00/Disfigure - Blank [NCS Release].mp3 2022-09-08 06:57:29.835 T:29456 INFO <general>: plugin.script.test: SRV: DEBUG: #EXTINF:0,Lensko - Let_s Go! [NCS Release].mp3 2022-09-08 06:57:29.849 T:29456 INFO <general>: plugin.script.test: SRV: DEBUG: smb://192.168.0.100/tmp-rols1/Austausch/00/Lensko - Let_s Go! [NCS Release].mp3 2022-09-08 06:57:29.863 T:29456 INFO <general>: plugin.script.test: SRV: DEBUG: #EXTINF:0,Musik_um_den_Mond_zu_beobachten.mp3 2022-09-08 06:57:29.877 T:29456 INFO <general>: plugin.script.test: SRV: DEBUG: smb://192.168.0.100/tmp-rols1/Austausch/00/Musik_um_den_Mond_zu_beobachten.mp3 2022-09-08 06:57:29.891 T:29456 INFO <general>: plugin.script.test: SRV: DEBUG: #EXTINF:0,Musik_um_im_Gras_zu_liegen.mp3 2022-09-08 06:57:29.905 T:29456 INFO <general>: plugin.script.test: SRV: DEBUG: smb://192.168.0.100/tmp-rols1/Austausch/00/Musik_um_im_Gras_zu_liegen.mp3 2022-09-08 06:57:29.918 T:29456 INFO <general>: plugin.script.test: SRV: DEBUG: #EXTINF:0,Meditative_Natursounds__Relaxen_am_Seeufer.mp3 2022-09-08 06:57:29.932 T:29456 INFO <general>: plugin.script.test: SRV: DEBUG: smb://192.168.0.100/tmp-rols1/Austausch/00/Meditative_Natursounds__Relaxen_am_Seeufer.mp3 2022-09-08 06:57:29.932 T:29456 INFO <general>: plugin.script.test: SRV: DEBUG: writing m3u tracks finished 2022-09-08 06:57:29.932 T:29456 INFO <general>: plugin.script.test: SRV: DEBUG: writing extra tags started 2022-09-08 06:57:29.933 T:29456 INFO <general>: plugin.script.test: SRV: DEBUG: #MEDIA::audio 2022-09-08 06:57:29.933 T:29456 INFO <general>: plugin.script.test: SRV: DEBUG: #TIME::13.360000610351562 2022-09-08 06:57:29.933 T:29456 INFO <general>: plugin.script.test: SRV: DEBUG: #PLPOS::0 2022-09-08 06:57:29.933 T:29456 INFO <general>: plugin.script.test: SRV: DEBUG: #PLSIZE::6 2022-09-08 06:57:29.933 T:29456 INFO <general>: plugin.script.test: SRV: DEBUG: #PLAYING::smb://192.168.0.100/tmp-rols1/Austausch/00/äöüüäDiviners feat. Contacreast - Tr opic Love [NCS Release].mp3 2022-09-08 06:57:29.933 T:29456 INFO <general>: plugin.script.test: SRV: DEBUG: #WINDOW::10000 2022-09-08 06:57:29.933 T:29456 INFO <general>: plugin.script.test: SRV: DEBUG: #STORE::DONE 2022-09-08 06:57:29.933 T:29456 INFO <general>: plugin.script.test: SRV: DEBUG: writing extra tags finished 2022-09-08 06:57:29.933 T:29456 INFO <general>: plugin.script.test: SRV: NOTIFICATION: "script fishied fine"
erzeugte testscript.m3u:
Code
Alles anzeigen#EXTCPlayListM3U::M3U #EXTINF:0,äöüüäDiviners feat. Contacreast - Tropic Love [NCS Release].mp3 smb://192.168.0.100/tmp-rols1/Austausch/00/äöüüäDiviners feat. Contacreast - Tropic Love [NCS Release].mp3 #EXTINF:0,Disfigure - Blank [NCS Release].mp3 smb://192.168.0.100/tmp-rols1/Austausch/00/Disfigure - Blank [NCS Release].mp3 #EXTINF:0,Lensko - Let_s Go! [NCS Release].mp3 smb://192.168.0.100/tmp-rols1/Austausch/00/Lensko - Let_s Go! [NCS Release].mp3 #EXTINF:0,Musik_um_den_Mond_zu_beobachten.mp3 smb://192.168.0.100/tmp-rols1/Austausch/00/Musik_um_den_Mond_zu_beobachten.mp3 #EXTINF:0,Musik_um_im_Gras_zu_liegen.mp3 smb://192.168.0.100/tmp-rols1/Austausch/00/Musik_um_im_Gras_zu_liegen.mp3 #EXTINF:0,Meditative_Natursounds__Relaxen_am_Seeufer.mp3 smb://192.168.0.100/tmp-rols1/Austausch/00/Meditative_Natursounds__Relaxen_am_Seeufer.mp3 #MEDIA::audio #TIME::13.360000610351562 #PLPOS::0 #PLSIZE::6 #PLAYING::smb://192.168.0.100/tmp-rols1/Austausch/00/äöüüäDiviners feat. Contacreast - Tropic Love [NCS Release].mp3 #WINDOW::10000 #STORE::DONE
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!