Проблемы с кодировкой в ​​python etree.tostring - PullRequest
10 голосов
/ 15 сентября 2009

Я использую 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&#195;&#188;rth Elektronik Midcom</tag>

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

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

Ответы [ 2 ]

19 голосов
/ 15 сентября 2009

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

import xml.etree.cElementTree as etree
elem = etree.Element('tag')
elem.text = u"Würth Elektronik Midcom"
xml = etree.tostring(elem,encoding='UTF-8')
1 голос
/ 28 января 2018

etree.tostring(elem, encoding=str)

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

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

...