eyeD3 で mp3 タグ (ID V1) を取得しており、そのエンコーディングを理解したいと考えています。ここに私が試すものがあります:
>>> print(type(mp3artist_v1))
<type 'unicode'>
>>> print(type(mp3artist_v1.encode('utf-8')))
<type 'str'>
>>> print(mp3artist_v1)
Zåìôèðà
>>> print(mp3artist_v1.encode('utf-8').decode('cp1252'))
ZåìôèðÃ
>>> print(u'Zемфира'.encode('utf-8').decode('cp1252'))
Zемфира
オンラインツールを使用して値をデコードすると、エンコーディングを変更することで値Zемфираを正しい値に変換でき、 .ZемфираCP1252 → UTF-8ZåìôèðàCP1252 → CP1251
Zемфираから取得するにはどうすればよいmp3artist_v1ですか? .encode('cp1252').decode('cp1251')うまく動作しますが、可能なエンコーディングを自動的に理解するにはどうすればよいですか (可能なエンコーディングは 3 つだけです - cp1251, cp1252, utf-8? 次のコードを使用する予定でした:
def forceDecode(string, codecs=['utf-8', 'cp1251', 'cp1252']):
for i in codecs:
try:
print(i)
return string.decode(i)
except:
pass
print "cannot decode url %s" % ([string])
しかし、最初にある文字セットでエンコードしてから別の文字セットでデコードする必要があるため、役に立ちません。