Форум сайта python.su
1
Нужно прочитать теги mp3 файлов и перекодировать их в utf8
Есть “audiobook_cp1251.mp3” файл с тегами в кодировке “ср1251”
С помощью программы mid3iconv читаю теги:
$ mid3iconv -p -d "audiobook_cp1251.mp3" Updating audiobook_cp1251.mp3 COMM=='dou'=The Black Box Publishing, NOT FOR SALE http://www.realmusic.ru/black_box TALB=Ñòàðàÿ Äîáðàÿ Ñàé Ôàé TCON=audiobook TDRC=2011 TIT2=Îïåðàöèÿ 'Âîíþ÷êà' TPE1=Êëèôôîðä Ñàéìàê TRCK=70
$ mid3iconv -e CP1251 -p -d "audiobook_cp1251.mp3" Updating audiobook_cp1251.mp3 COMM=='dou'=The Black Box Publishing, NOT FOR SALE http://www.realmusic.ru/black_box TALB=Старая Добрая Сай Фай TCON=audiobook TDRC=2011 TIT2=Операция 'Вонючка' TPE1=Клиффорд Саймак TRCK=70
$ python3 Python 3.4.3 (default, Oct 14 2015, 20:28:29) [GCC 4.8.4] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from tinytag import TinyTag >>> tag = TinyTag.get('audiobook_cp1251.mp3') >>> tag.artist 'Êëèôôîðä Ñàéìàê' >>> tag.artist.encode('utf8') b'\xc3\x8a\xc3\xab\xc3\xa8\xc3\xb4\xc3\xb4\xc3\xae\xc3\xb0\xc3\xa4 \xc3\x91\xc3\xa0\xc3\xa9\xc3\xac\xc3\xa0\xc3\xaa'
>>> tag = TinyTag.get('audiobook_2.mp3') >>> tag.artist 'Арльд Роберто'
Отредактировано AxaRu (Янв. 25, 2016 16:13:02)
Офлайн
857
>>> s = 'Êëèôôîðä Ñàéìàê' >>> s.encode('latin1').decode('cp1251') 'Клиффорд Саймак' >>>
Офлайн
1
py.user.next, спасибо огромное.
Если не трудно поясните пожалуйста, как это работает?
Почему в байтовый массив нужно преобразовывать с аргуменом ‘latin1’?
Правильно я понимаю, что конструкция encode('latin1') “говорит” интерпретатору считать строку байтовым массивом, не преобразовывая символы в другую кодировку?
Отредактировано AxaRu (Янв. 25, 2016 16:32:34)
Офлайн
857
AxaRulatin1 - кодирует первые 256 кодовых точек юникода.
Почему в байтовый массив нужно преобразовывать с аргуменом ‘latin1’?
>>> s = 'Êëèôôîðä Ñàéìàê' >>> list(map(ord, s)) [202, 235, 232, 244, 244, 238, 240, 228, 32, 209, 224, 233, 236, 224, 234] >>> bytes(list(map(ord, s))) b'\xca\xeb\xe8\xf4\xf4\xee\xf0\xe4 \xd1\xe0\xe9\xec\xe0\xea' >>> s.encode('latin1') b'\xca\xeb\xe8\xf4\xf4\xee\xf0\xe4 \xd1\xe0\xe9\xec\xe0\xea' >>> list(s.encode('latin1')) [202, 235, 232, 244, 244, 238, 240, 228, 32, 209, 224, 233, 236, 224, 234] >>>
Отредактировано py.user.next (Янв. 25, 2016 19:22:22)
Офлайн