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