Как сконвертировать теги mp3 файлов в iso-8859-5?

Проблема первая — теги исходных файлов могут быть в unicode или в win-1251.

Проблема вторая — нужно записать теги назад в id3 v1.


Что я пробовал сделать на примере одного поля (увы, в программировании не силен и в кодировках, видимо, плохо разобрался):
import eyeD3

def getTagStr (tagUnicStr):
    # gets the 1byte 8bits string, as written in the tag, from the unicode, returned by tag.get*
    # taken from tag2utf-0.16 by Kopats Andrei
    ls = []
    for i in range(0,len(tagUnicStr)):
        if (ord(tagUnicStr[i]) in range(256)):
            ls.append(chr(ord(tagUnicStr[i])))
        else:
            ls.append(tagUnicStr[i])
    Str8 = ''.join(ls)
    return Str8

trackInfo = eyeD3.Mp3AudioFile(path)
tag = trackInfo.getTag()
tag.link(path)
mp3artist = tag.getArtist()
mp3artist = getTagStr(mp3artist)
mp3encoding = 'utf-8'
try:
    # pseudo utf-8 encoding?
    mp3artist = mp3artist.decode('utf-8')
except UnicodeDecodeError, err:
    # cp1251
    mp3artist = mp3artist.decode('cp1251')
    mp3encoding = 'cp1251'
except UnicodeEncodeError, err:
    # utf-8?
    pass

#TODO: add id3 v2 deletion

tag.setArtist(mp3artist.encode('iso-8859-5'))
tag.update()



На некоторых файлах вываливается с ошибкой (чего-то не может декодировать).

Ну и самое главное — не хочет записывать теги с русскими буквами —
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-1: ordinal not in range(256)
  • Вопрос задан
  • 2993 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы