Problemi di codifica con etree.tostring di Python
Domanda
Sto usando xml.etree.cElementTree di python 2.6.2 per creare un documento 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')
Alla fine della giornata, xml appare come:
<?xml version='1.0' encoding='UTF-8'?>
<tag>Würth Elektronik Midcom</tag>
Sembra che la tostrazione abbia ignorato il parametro di codifica e abbia codificato 'ü' in qualche altra codifica dei caratteri ('ü' è una codifica utf-8 valida, ne sono abbastanza sicuro).
Qualsiasi consiglio su cosa sto facendo di sbagliato sarebbe molto apprezzato.
Soluzione
Stai codificando il testo due volte. Prova questo:
import xml.etree.cElementTree as etree
elem = etree.Element('tag')
elem.text = u"Würth Elektronik Midcom"
xml = etree.tostring(elem,encoding='UTF-8')
Altri suggerimenti
etree.tostring (elem, encoding = str)
restituirà str
ma non binario
in Python 3
Puoi anche serializzare una stringa Unicode senza dichiarazione di passando la funzione
unicode
come codifica (ostr
in Py3), o il nome "unicode". Ciò modifica il valore di ritorno da un byte stringa a una stringa unicode non codificata.