2012-12-29 60 views
1

我想解析一個iTunes媒體庫文件,這是一個plist文件,使用python & plistlib。我寫了一個簡單的Python腳本:Python 3解析iTunes庫plist文件使用plistlib

import plistlib 

plist = plistlib.readPlist('tunes.xml') 
print(plist['Tracks']) 

但是,當我嘗試運行它在第3行發生錯誤:

UnicodeEncodeError: 'ascii' codec can't encode character '\xe9' in position 21970: ordinal not in range(128) 

我試着將文件加載一個UTF-8編碼轉換到bytearray並使用plistlib.readPlistFromBytes但仍然發生錯誤

哪一個是解決此問題的最佳方法?

+0

哪條語句((上述「第3行」)出現錯誤?你在什麼環境下運行? (OS X,Windows - 終端會話,IDLE) –

+0

'print(plist ['Tracks'])'是發生錯誤的地方。我正在使用Linux(Arch Linux)。 – errorhandler

+0

在OS X + Python 3.3或2.7上,您的代碼無需編解碼器即可直接運行。在Python 2.6下,我需要編解碼器。我懷疑它是在Python/Linux組合中... –

回答

2

機會是您正在運行的終端會話或控制檯未設置爲兼容UTF-8的locale。有關更多信息,請參閱https://wiki.archlinux.org/index.php/Locale。例如,在美國英語區域設置中:

export LANG=en_US.UTF-8