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-8
Zåìôèðà
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])
しかし、最初にある文字セットでエンコードしてから別の文字セットでデコードする必要があるため、役に立ちません。