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