Проблемы с кодировкой в ​​etree.tostring в python

Я использую python 2.6.2 xml.etree.cElementTree для создания 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&#195;&#188;rth Elektronik Midcom</tag>

Похоже, что tostring проигнорировал параметр кодировки и закодировал 'ü' в какую-то другую кодировку символов (я уверен, что 'ü' является допустимой кодировкой utf-8).

Буду очень признателен за любые советы относительно того, что я делаю неправильно.


person smock    schedule 15.09.2009    source источник


Ответы (2)


Вы кодируете текст дважды. Попробуй это:

import xml.etree.cElementTree as etree
elem = etree.Element('tag')
elem.text = u"Würth Elektronik Midcom"
xml = etree.tostring(elem, encoding='UTF-8')
person John Millikin    schedule 15.09.2009

etree.tostring(elem, encoding=str)

вернет str, но не binary в Python 3

Вы также можете сериализоваться в строку Unicode без объявления, передав функцию unicode в качестве кодировки (или str в Py3) или имя «unicode». Это изменяет возвращаемое значение из строки байтов в незакодированную строку Unicode.

person BaiJiFeiLong    schedule 28.01.2018