我得到一个带有 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])
但这无济于事,因为我应该先用一个字符集编码,然后再用另一个字符集解码。