All pastes #423885 Raw Edit

Mine

public text v1 · immutable
·published 2007-04-04 13:47 UTC
rendered paste body
#!/usr/bin/env python
# ex: ts=8 sts=4 sw=4 et
import eyeD3
import os

def recover(s, enc):
    return s.encode('latin-1').decode(enc)

def recoverid3(tag, f, enc):
    artist = recover(tag.getArtist(), enc)
    album = recover(tag.getAlbum(), enc)
    title = recover(tag.getTitle(), enc)

    if tag.getVersion() in (eyeD3.ID3_V1, eyeD3.ID3_V1_0, eyeD3.ID3_V1_1,
                            eyeD3.ID3_V1_COMMENT_DESC, eyeD3.ID3_V2_2):
        tag.setVersion(eyeD3.ID3_V2_4)
        #tag.remove()

    tag.setTextEncoding(eyeD3.UTF_16_ENCODING)
    tag.setArtist(artist)
    tag.setAlbum(album)
    tag.setTitle(title)
    tag.update()
    return

for dirp, dirs, files in os.walk('.'):
    for f in files:
        try:
            tag = eyeD3.Tag()
            if tag.link(os.path.join(dirp, f)):
                tags = tag.getArtist() + tag.getAlbum() + tag.getTitle()
                try:
                    tags.encode('ascii')
                except UnicodeError:
                    pass
                else:
                    continue

                for enc in ('utf-8', 'cp949', 'cp932'):
                    try:
                        recover(tags, enc)
                    except UnicodeError:
                        pass
                    else:
                        print "Recovered", enc, "for", f
                        recoverid3(tag, f, enc)
                        break
        except Exception, e:
            print e