lxml.etree.XMLSyntaxError, Документ помечен UTF-16, но имеет содержимое UTF-8 - PullRequest
0 голосов
/ 02 мая 2018

lxml.etree.XMLSyntaxError, Документ помечен UTF-16, но имеет содержимое UTF-8

Я получаю сообщение об ошибке, используя lxml lib в python. Другие решения / хаки заменяют utf-16 на utf-8 в файле php. Какой питонный способ решить эту проблему?

код питона:

import lxml.etree as etree

tree =  etree.parse("req.xml")

req.xml:

<?xml version="1.0" encoding="utf-16"?>
<test 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
</test>

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Ознакомьтесь с документацией конструктора XMLParser:

>>> help(etree.XMLParser)

Среди других параметров есть параметр encoding, который позволяет "переопределить кодировку документа", как говорят документы.

Это именно то, что вам нужно:

parser = etree.XMLParser(encoding='UTF-8')
tree = etree.parse("req.xml", parser=parser)

Если сообщение об ошибке правильное (т. Е. Других проблем с документом нет), то я ожидаю, что это сработает.

0 голосов
/ 03 мая 2018

Вы можете анализировать XML-контент, используя BeautifulSoup, что является более питоническим способом, чем вам требуется.

ПРИМЕЧАНИЕ. Если ваши данные закодированы в utf-16, их можно легко проанализировать, расшифровав в utf-8 во время чтения / ПАРАМЕТРА содержимого файла.

Ниже приведен код:

sample.xml содержит следующие данные:

<?xml version="1.0" encoding="utf-16"?>
<test 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
</test>

Код:

from bs4 import BeautifulSoup
with open("sample.xml", "r") as f: # opening xml file
    content = f.read().decode('utf-8', 'ignore') # xml content stored in this variable and decode to utf-8

soup = BeautifulSoup(content, 'html.parser') #parse content to BeautifulSoup Module
data = [data.attrsfor data in soup.findAll("test")]
print data

Выход:

{u'xmlns:xsi': u'http://www.w3.org/2001/XMLSchema-instance', u'xmlns:xsd': u'http://www.w3.org/2001/XMLSchema'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...