2010-02-03 57 views
0

我使用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(中國)。

當你孤單你會想起誰 
+1

GBK不是標準的一部分,所以誘變劑很適合弄錯。參見http://en.wikipedia.org/wiki/ID3 有效的編碼是latin1,utf16(帶有BOM或BE)和utf8,並用字節字段表示。 但看到如何解決這個問題的任何好的答案,我只是在觀察! – 2010-02-03 10:08:06

回答

4

它看起來像字符串已被解碼爲unicode使用錯誤的編碼(拉丁-1)。

您需要將其編碼爲字節字符串,然後使用正確的編碼將其解碼回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') 
當你孤單你會想起誰 
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中正常工作。