爲xml.etree.ElementTree
用於Python 2某些說明,而對於其功能parse()
。該函數將源作爲第一個參數。或者它可以是一個開放的文件對象,或者它可以是一個文件名。該函數創建ElementTree
實例,然後將其傳遞的參數看起來像這樣的tree.parse(...)
:
def parse(self, source, parser=None):
if not hasattr(source, "read"):
source = open(source, "rb")
if not parser:
parser = XMLParser(target=TreeBuilder())
while 1:
data = source.read(65536)
if not data:
break
parser.feed(data)
self._root = parser.close()
return self._root
可以從第三行,如果文件名獲得通過,該文件以二進制模式打開猜測。這樣,如果文件內容是UTF-8,那麼您正在處理具有UTF-8編碼二進制內容的元素。如果是這種情況,您應該打開也以二進制模式打開輸出文件。
另一種可能性是使用codecs.open(filename, encoding='utf-8')
打開輸入文件,並將打開的文件對象傳遞給xml.etree.ElementTree.parse(...)
。這樣,ElementTree
實例將與Unicode字符串一起使用,並且在將內容寫回時應該將結果編碼爲UTF-8。如果是這種情況,您可以使用帶有UTF-8的codecs.open(...)
來編寫。您可以將打開的輸出文件對象傳遞給您提到的tree.write(f)
,或,您可以讓tree.write(filename, encoding='utf-8')
爲您打開文件。
寫入文件時,您想要「編碼」,而不是「解碼」。 – eumiro 2012-07-18 08:44:05
現在的問題是,'ü'不僅僅是記事本+ +的方式來處理XML文件時顯示字符以外的字符,或者序列是否在輸入文件中。看到我的評論http://stackoverflow.com/a/11539528/1346705 – pepr 2012-07-18 10:48:31