我試圖使用xml.etree讀取和編寫包含€符號的xml文件。在Python中使用xml.etree編寫包含歐元符號(€)的xml文件
我的簡化代碼如下所示:
optionsdirectory = os.getcwd()
optionsfile = os.path.join(optionsdirectory, "conf")
optionstree = ET.parse(optionsfile)
options = optionstree.getroot()
for option in options:
if option.tag == "currency":
option.text = "€"
optionstree.write(optionsfile, encoding="UTF-8")
我得到,當它運行以下錯誤:
File "C:\curr.py", line 8
optionstree.write(optionsfile, encoding="UTF-8")
File "C:\Python27\lib\xml\etree\ElementTree.py", line 815, in write
serialize(write, self._root, encoding, qnames, namespaces)
File "C:\Python27\lib\xml\etree\ElementTree.py", line 934, in _serialize_xml
_serialize_xml(write, e, encoding, qnames, None)
File "C:\Python27\lib\xml\etree\ElementTree.py", line 932, in _serialize_xml
write(_escape_cdata(text, encoding))
File "C:\Python27\lib\xml\etree\ElementTree.py", line 1068, in _escape_cdata
return text.encode(encoding, "xmlcharrefreplace")
UnicodeDecodeError: 'ascii' codec can't decode byte 0x80 in position 2114: ordinal not in range(128)
是否有寫€符號使用XML XML文件的方式.etree?
嗯,我終於明白了。我做了以下三件事。我認爲它們都是必需的:1)將最初的'conf.xml'文件保存爲UTF-8文件(這使得ET.parse()能夠工作)2)將'filenamelist = filenamelist +''+ file'到'filenamelist = filenamelist +'「+ file.decode('ISO-8859-1')'(這使得文件名稱文本適合寫入)3)將write()語句改爲'optionstree.write(optionsfile,encoding ='ISO-8859-1')'(匹配用於文件名的編碼) – Jake
我還應該注意到我使用的是Python 2.7版本。我讀過他們改變了3.x版本的unicode處理的東西;也許我不會在Python 3.x中遇到這些問題 – Jake