slav0nic's blog

Заметки о python, linux и других занимательных вещах

Заставляем exaile, listen и другие mp3 python based плееры работать с cp1251

Вот уже долгое время юзаю плеер exaile, но работа с кодировкой не могла не раздражать: По стандарту в id3 тегах не может быть cp1251 кодировок, но у нас это никого не волн ет:]. Пытался пофиксить в коде exaile, но ничего не вышло, запутался в классах и тп В), глунул в код mutagena, которые юзается для работы с mp3 и тп тегами, и нашёл простое решение=) Ищем class EncodedTextSpec (~629 строка) и добавляем в список encoding кортеж:

('cp1251', 'x00') всё

upd: хотя конечно корректней будет добавить строку:

mutagen.id3.EncodedTextSpec.encodings.append(('cp1251','x00'))

в media.py например (для exaile), чёт я сразу протупил%)

to mkdir, как видишь можно было и без замены latin1 на cp1251 это сделать В)

ps: если база была уже создана, делаем rm -rf ~/.exaile и пересоздаём:] хотя часть тегов всё равно крякозябрами, надо раздуплить что там за кодировка, да и после перезапуска в списке часть титлов тоже крякозябрами, но это пусть курят авторы сами В)

сами плееры можно стянуть с

exaile.org

listengnome.free.fr

Vlad post on 2008-05-27 14:55:47
Где находится media.py, в который надо добавить "mutagen.id3.EncodedTextSpec.encodings.append(('cp1251','x00')) " ?
slav0nic post on 2008-05-27 15:07:02
архитектура приложения поменялась вроде, да т мутаген тоже, теперь эта переменная неизменяема попробуй в /usr/lib/exaile/xl/media/__init__.py добавить import mutagen.id3 mutagen.id3.EncodedTextSpec.encodings = (('cp1251', '\x00'), ('utf16', '\x00\x00'), ('utf_16_be', '\x00\x00'), ('utf8', '\x00'))
talbot post on 2008-11-27 21:00:09
Этот метод не работает! приложение перестаёт запускаться.
fly-away post on 2009-06-13 17:26:11
Да, всё течет, всё меняется :)) Сейчас надо в файлике /usr/lib/python2.6/site-packages/mutagen/id3.py (путь меняется в зависимости от версии питона и дистрибутива :)) перейти на строку примерно 664 и сменить в определении кодировок _encodings = ( ('latin1', '\x00'), на _encodings = ( ('cp1251', '\x00'), slav0nic, какой у тебя сейчас плеер, если не секрет?
slav0nic post on 2009-06-14 00:49:43
exaile
Trilliput post on 2009-06-21 12:38:36
Добавил я cp1251 в файл id3.py. Он у меня теперь нормально отображает определяет только некоторые тэги, а другие так и остались ериками.

web.py