Hallo Zusammen,
ich bin so langsam am Ende, ich erhalte auf OSMC oder Libreelec einen Unicodeerror.
Code
UnicodeEncodeError: 'utf-8' codec can't encode characters in position 42-45: surrogates not allowed
Habe ein Script, was mir ein M3U File erzeugt, was beim Abspielen von Medien mit Sonderzeichen (z.B. äöü) im Dateiname einen Error wirft.
Der Error tritt unter Windows nicht auf.
Ich hoffe ihr habt einen Rat für mich, andersfalls zweifle ich schon an, dass die PythonVersion auf Linuxsystemen nicht sauber integriert ist.
Python: testscript.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
__author__ = 'harryberlin'
import os
import xbmc
import xbmcgui
import xbmcaddon
from xbmcvfs import translatePath as xbmc_translate_path
ADDON = xbmcaddon.Addon()
ADDON_NAME = ADDON.getAddonInfo('name')
ADDON_ID = ADDON.getAddonInfo('id')
ADDON_VERSION = ADDON.getAddonInfo('version')
ADDON_PATH = ADDON.getAddonInfo('path')
ADDON_USER_PATH = os.path.join(xbmc_translate_path('special://userdata'), 'addon_data', ADDON_ID)
ADDON_ICON = os.path.join(ADDON_PATH, 'icon.png')
ADDON_M3UFILE = os.path.join(ADDON_USER_PATH, 'testscript.m3u')
XBMC_LOG_LEVEL = xbmc.LOGINFO
def [definition='1','0']log[/definition](msg):
xbmc.[definition='1','0']log[/definition](f'{ADDON_ID}: SRV: {msg}', XBMC_LOG_LEVEL)
def note(heading, message=None, time=-1, icon=None):
if time == -1:
xbmcgui.Dialog().notification(heading='%s' % heading, message='%s' % message if message else ' ', icon='%s' % (icon if icon else ADDON_ICON))
else:
xbmcgui.Dialog().notification(heading='%s' % heading, message='%s' % message if message else ' ', icon='%s' % (icon if icon else ADDON_ICON), time=time)
[definition='1','0']log[/definition]('NOTIFICATION: "%s%s"' % (heading, ' - %s' % message if message else ''))
def debug(string):
[definition='1','0']log[/definition](f'DEBUG: {string}')
def main():
media = 'audio'
time = xbmc.Player().getTime()
plist = xbmc.PlayList(0)
plsize = plist.size()
playing = xbmc.Player().getPlayingFile()
window = xbmcgui.getCurrentWindowId()
plpos = plist.getposition()
if time > 0:
if not os.path.exists(ADDON_USER_PATH):
os.mkdir(ADDON_USER_PATH)
with open(ADDON_M3UFILE, 'w', encoding='utf-8') as m3ufile:
m3ufile.write('#EXTCPlayListM3U::M3U\n')
debug('writing m3u tracks started')
if plsize != '-':
for i in range(0, plsize):
temp = str(os.path.split(plist[i].getPath())[1])
debug(f'#EXTINF:0,{temp}\n')
m3ufile.write(f'#EXTINF:0,{temp}\n')
temp = plist[i].getPath()
debug(f'{temp}\n')
m3ufile.write(f'{temp}\n')
debug('writing m3u tracks finished')
debug('writing extra tags started')
debug(f'#MEDIA::{media}\n')
m3ufile.write(f'#MEDIA::{media}\n')
debug(f'#TIME::{time}\n')
m3ufile.write(f'#TIME::{time}\n')
debug(f'#PLPOS::{plpos}\n')
m3ufile.write(f'#PLPOS::{plpos}\n')
debug(f'#PLSIZE::{plsize}\n')
m3ufile.write(f'#PLSIZE::{plsize}\n')
debug(f'#PLAYING::{playing}\n')
m3ufile.write(f'#PLAYING::{playing}\n')
debug(f'#WINDOW::{window}\n')
m3ufile.write(f'#WINDOW::{window}\n')
debug('#STORE::DONE\n')
m3ufile.write('#STORE::DONE\n')
debug('writing extra tags finished')
if __name__ == '__main__':
main()
Alles anzeigen