如何纠正错误编码的字符串?

时间:2010-02-03 09:29:52

标签: python encoding mp3 mutagen

我使用mutagen来读取mp3元数据,因为id3标签是作为unicode读取的,但实际上它是GBK编码的。如何在python中纠正这个?

audio = EasyID3(name)
title = audio["title"][0] 
print title
print repr(title)

产生

µ±Äã¹Âµ¥Äã»áÏëÆðË­
u'\xb5\xb1\xc4\xe3\xb9\xc2\xb5\xa5\xc4\xe3\xbb\xe1\xcf\xeb\xc6\xf0\xcb\xad'

但事实上它应该是GBK(中文)。

当你孤单你会想起谁

2 个答案:

答案 0 :(得分:4)

看起来字符串已使用错误的编码(latin-1)解码为unicode。

您需要将其编码为字节字符串,然后使用正确的编码将其解码回unicode。

title = u'\xb5\xb1\xc4\xe3\xb9\xc2\xb5\xa5\xc4\xe3\xbb\xe1\xcf\xeb\xc6\xf0\xcb\xad'
print title.encode('latin-1').decode('gbk')
当你孤单你会想起谁

答案 1 :(得分:2)

看起来它是使用latin1自动解码的。修复:

>>> title = u'\xb5\xb1\xc4\xe3\xb9\xc2\xb5\xa5\xc4\xe3\xbb\xe1\xcf\xeb\xc6\xf0\xcb\xad'
>>> print title.encode('latin1').decode('GBK')
当你孤单你会想起谁

在Python 2.x中测试过,但在3中也应该可以正常工作。