3

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]) 

しかし、最初にある文字セットでエンコードしてから別の文字セットでデコードする必要があるため、役に立ちません。

4

1 に答える 1