Проблемы с кодировкой в python etree.tostring
Вопрос
Я использую xml.etree.cElementTree из Python 2.6.2 для создания XML-документа:
import xml.etree.cElementTree as etree
elem = etree.Element('tag')
elem.text = (u"Würth Elektronik Midcom").encode('utf-8')
xml = etree.tostring(elem,encoding='UTF-8')
В конце дня xml выглядит так:
<?xml version='1.0' encoding='UTF-8'?>
<tag>Würth Elektronik Midcom</tag>
Похоже, что tostring проигнорировал параметр кодирования и закодировал '& # 252;' в какую-то другую кодировку символов ('& # 252;' - допустимая кодировка utf-8, я вполне уверен). Р>
Любой совет относительно того, что я делаю неправильно, будет принят с благодарностью.
Решение
Вы дважды кодируете текст. Попробуйте это:
import xml.etree.cElementTree as etree
elem = etree.Element('tag')
elem.text = u"Würth Elektronik Midcom"
xml = etree.tostring(elem,encoding='UTF-8')
Другие советы
etree.tostring (elem, encoding = str)
вернет str
, но не двоичный
в Python 3
Вы также можете сериализовать строку Unicode без объявления передача функции
unicode
в качестве кодировки (илиstr
в Py3), или имя «Юникод». Это меняет возвращаемое значение из байта строка в некодированную строку Юникода.