У меня проблема с кодировкой символов с Mutagen.Mutagen 1.22 Кодировка Проблема
Я отправил dict[key]
в Юникод, я все получаю ошибки. Этот персонаж - U+00E9
или é
, но то, что я печатаю, - ├⌐
. Я предполагаю, что набор символов по умолчанию для Mutagen - UTF-8, но есть ли способ исправить это?
Выход:
Winter Wonderland.mp3
Album : Christmas
Album Artist: Michael Bublé
Artist : Michael Bublé
Composer : None
Disk : None
Encoded By : None
Genre : Christmas
Title : Winter Wonderland
Track : 17/19
Year : 2011
Код:
#!/usr/bin/env python
import os
import re
from mutagen.mp3 import MP3
first_cap_re = re.compile('(.)([A-Z][a-z]+)')
all_cap_re = re.compile('([a-z0-9])([A-Z])')
def convertCamelCase2Underscore(name):
s1 = first_cap_re.sub(r'\1_\2', name)
return all_cap_re.sub(r'\1_\2', s1).lower()
def convertCamelCase2CapitalizedWords(name):
return ' '.join([x.capitalize() for x in convertCamelCase2Underscore(name).split('_')])
def safeValue(dict, key):
return None if key not in dict else dict[key]
class Track:
def __init__(self, path):
audio = MP3(path)
self.title = safeValue(audio, 'TIT2')
self.artist = safeValue(audio, 'TPE1')
self.albumArtist = safeValue(audio, 'TPE2')
self.album = safeValue(audio, 'TALB')
self.genre = safeValue(audio, 'TCON')
self.year = safeValue(audio, 'TDRL')
self.encodedBy = safeValue(audio, 'TENC')
self.composer = safeValue(audio, 'TXXX:TCM')
self.track = safeValue(audio, 'TRCK')
self.disk = safeValue(audio, 'TXXX:TPA')
def __repr__(self):
ret = ''
fields = self.__dict__
for k, v in sorted(self.__dict__.iteritems()):
ret += '{:12s}: {:s}\n'.format(convertCamelCase2CapitalizedWords(k), v)
return ret
files = os.listdir('.')
for filename in files:
print filename
print Track(filename)
Текстовая информация в тегах ID3v2 может быть закодирована [несколькими способами] (http://en.wikipedia.org/wiki/Id3v2#ID3v2). Я не вижу ничего в последней документации Mutagen (http://mutagen.readthedocs.org/en/latest/), которая указывает любой набор символов по умолчанию, поэтому возможно, что он просто возвращает данные сырого тега - хотя на странице проекта говорится он поддерживает Unicode. Если все остальное не удается, вы можете взглянуть на исходный код, так как он является открытым исходным кодом. – martineau