Я работаю над экспортом небольшого подмножества музыки из моей библиотеки iTunes на внешний диск для использования с динамиком Sonos (через Media Library на Sonos).Все шло нормально, пока я не наткнулся на какой-то текст в Unicode в названиях треков, альбомов и исполнителей.
Я перехожу из iTunes на Mac в структуру папок в Linux (Ubuntu), и все пути к файлам содержаторигинальные имена Unicode, и они отображаются и воспроизводятся из Sonos в представлении Исполнитель / Альбом.Единственная проблема - это списки воспроизведения, которые я генерирую с помощью небольшого количества кода Python3.
Sonos не поддерживает кодировку UTF-8 в списках воспроизведения .m3u / .m3u8.Характер ÷ был интерпретирован Соносом как Ã ·, который после небольшого поиска в Google, я обнаружил, явно смешивал UTF-8 и UTF-16 (÷ 0xC3 0xB7 в UTF-8, в то время как Ã - U + 00C3 в UTF-16 и· Это U + 00B7 в UTF-16).Я пробовал много разных способов его кодирования, и просто не могу заставить его распознавать треки с нестандартными (не ASCII?) Символами в их именах.
Затем я попробовал плейлисты .wpl, идумал, что я решил это.Треки с такими символами, как ÷ и • в их пути, теперь работают отлично, просто используя эти символы в форме Unicode / UTF-8 в самом файле списка воспроизведения.
Однако, как только я начинал убирать иЗакончив код, я нашел некоторые другие символы, которые не обрабатывались правильно: ö, å, á и несколько других.Я пытался использовать их как исходные символы Юникода, но также и как их закодированный идентификатор XML, например ́
Использование этого формата не влияет на то, что работает или не работает - ÷ (÷
) и • (•
) все в порядке, в то время как ö (ö
), å (å
) и á (á
) - нет.
Я никогда раньше не работал с Unicode / UTF-8, но, прочитав различные руководства и инструкции, я чувствую, что подхожу ближе, но, возможно, просто упускаю что-то простое.Тот факт, что некоторые символы Юникода работают сейчас, а другие нет, заставляет меня думать, что это должно быть что-то очевидное!Полагаю, разница в том, что акценты изменяют предыдущий символ, а не сам по себе символ, но пытались удалить предыдущую букву, и это не сработало!
В самом Python я ничего не делаюособенно умныйЯ прочитал данные из XML-файла iTunes, используя:
with open(settings['itunes_path'], 'rb') as itunes_handle:
itunes_library = plistlib.load(itunes_handle)
Для экспорта я пробовал десятки различных опций, но обычно что-то вроде ниже (иногда с encoding = 'utf-8' и различнымидругие параметры):
with open(dest_path, 'w') as playlist_file:
playlist_file.write(generated_playlist)
Где generated_playlist
- это результат извлечения и фильтрации данных из itunes_library, после запуска urllib.parse.unquote()
для любых данных iTunes XML.
Любые мысли или советы погде искать будет очень ценится!Я надеюсь, что для тех, кто лучше понимает Unicode, ответ будет действительно очевидным!Спасибо!
Текущая версия кода доступна здесь: https://github.com/dwalker-uk/iTunesToSonos