0

Проблема заключается в том, что при попытке распарсить xml-документ получаю ошибку:

lxml.etree.XMLSyntaxError: Input is not proper UTF-8, indicate encoding!

Код:

#-*- coding cp1251 -*-
import sys
from lxml import etree
reload(sys)
sys.setdefaultencoding("cp1251")

inputFile = a.ED

tree = etree.parse(inputFile)
nodes = tree.xpath('/')
print nodes.decode('cp1251')

Windows 7, python 2.7, lxml 2.3

В документе:

<ED101 sysCode ="04">
<dsig:SigValue xmlns:dsig="urn">AAAA</dsig:SigValue>
<Name>Сергей Николаевич</Name>
</ED101>
jfs
  • 52,361
  • 1
    Укажите кодировку xml-документа или перекодируйте его содержимое в utf-8. – Sergey Gornostaev Mar 29 '16 at 15:39
  • не относится напрямую к вопросу, но стоит упомянуть: 1- #-*- coding cp1251 -*- строчка не имеет никакого эффекта в вашем Питон коде, т.к. в нём нет не-ascii символов. 2- не используйте reload(sys); sys.setdefaultencoding("cp1251") -- это просто способ испортить данные (без явных ошибок, которые бы на проблему указали) или получить кракозябы на выходе. 3- .decode('cp1251') выглядит ошибочно. lxml должен и так возвращать unicode тип для не-ascii содержимого. Достаточно печатать unicode напрямую. – jfs Mar 29 '16 at 20:28
  • Необходимо либо двоеточие либо знак равно после coding добавить, чтобы как декларация кодировки строчка воспринималась. Пример: # -*- coding: utf-8 -*- (без двоеточия SyntaxError возникнет, если не-ascii символ исходном коде появится (в строковых константах, в комментариях). – jfs Mar 29 '16 at 23:41
  • @jfs Пожалуйста, опубликуйте ваши комментарии в виде ответа. – Nicolas Chabanovsky Mar 30 '16 at 06:40
  • @NicolasChabanovsky мои комментарии не имеют отношения к проблеме с xml. Чтобы исправить XMLSyntaxError, нужно следовать рекомендации Sergey Gornostaev. – jfs Mar 30 '16 at 09:14
  • Sergey Gornostaev - Спасибо большое! – Sergey Kurbanov Mar 30 '16 at 11:59
  • Всем большое спасибо за Коментарии сейчас буду пробовать. – Sergey Kurbanov Mar 30 '16 at 11:59

0 Answers0