osj*_*ick 3 python xml encoding
我有这个 XML 文件,名为xmltest.xml:
<?xml version="1.0" encoding="GBK"?>
<productMeta>
<bands>1,2,3,4</bands>
<imageName>TestName.tif</imageName>
<browseName>TestName.jpg</browseName>
</productMeta>
Run Code Online (Sandbox Code Playgroud)
我有这个 Python 虚拟代码:
import xml.etree.ElementTree as ET
xmldoc = ET.parse('xmltest.xml')
Run Code Online (Sandbox Code Playgroud)
但它提出了一个ValueError:
ValueError:不支持多字节编码
我理解这个错误,它引发的原因是 XML 文件第一行中的编码声明。XML 文件采用 UTF-8 编码,但始终具有该声明(我不是要分析的 XML 文件的创建者)。在解析前一个 XML 文件时,如何避免这种编码声明?
我尝试过的对我xml有用的一件事是将文件作为文件对象打开,然后使用ElementTree.fromstring()传入文件的完整内容。
例子 -
>>> import xml.etree.ElementTree as ET
>>> ef = ET.parse('a.xml')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python34\lib\xml\etree\ElementTree.py", line 1187, in parse
tree.parse(source, parser)
File "C:\Python34\lib\xml\etree\ElementTree.py", line 598, in parse
self._root = parser._parse_whole(source)
ValueError: multi-byte encodings are not supported
>>> with open('a.xml','r') as f:
... ef = ET.fromstring(f.read())
...
>>> ef
<Element 'productMeta' at 0x028DF180>
Run Code Online (Sandbox Code Playgroud)
您还可以XMLParser使用所需的编码创建一个,这应该使您能够从该编码解析字符串,例如 -
import xml.etree.ElementTree as ET
xmlp = ET.XMLParser(encoding="utf-8")
f = ET.parse('a.xml',parser=xmlp)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17843 次 |
| 最近记录: |