--- /usr/lib/exaile/xl/trax/track.py 2010-04-13 09:32:37.000000000 +0800 +++ track.py 2010-07-08 01:24:28.147281810 +0800 @@ -387,10 +387,23 @@ :param notify_changed: whether to send a signal to let other parts of Exaile know there has been an update. Only set this to False if you know that no other parts of Exaile need to be updated. """ + + def convert_encode(text): + for encode in ['gbk', 'big5', 'shift_jis']: + try: + text = text.encode('latin').decode(encode) + break + except: + try: + text = text[0:-1].encode('latin').decode(encode) + except: + continue + return text + # handle values that aren't lists if not isinstance(values, list): if not tag.startswith("__"): # internal tags dont have to be lists values = [values] @@ -405,11 +418,14 @@ try: del self.__tags[tag] except KeyError: pass else: - self.__tags[tag] = values + if isinstance(values, list): + self.__tags[tag] = [convert_encode(text) for text in values] + else: + self.__tags[tag] = values self._dirty = True if notify_changed: event.log_event("track_tags_changed", self, tag)