Problemas de codificación con etree.tostring de python
Pregunta
Estoy usando xml.etree.cElementTree de python 2.6.2 para crear 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')
Al final del día, xml se ve así:
<?xml version='1.0' encoding='UTF-8'?>
<tag>Würth Elektronik Midcom</tag>
Parece que la cadena ignoró el parámetro de codificación y codificó 'ü' en otra codificación de caracteres ('ü' es una codificación utf-8 válida, estoy bastante seguro).
Cualquier consejo sobre lo que estoy haciendo mal sería muy apreciado.
Solución
Estás codificando el texto dos veces. Prueba esto:
import xml.etree.cElementTree as etree
elem = etree.Element('tag')
elem.text = u"Würth Elektronik Midcom"
xml = etree.tostring(elem,encoding='UTF-8')
Otros consejos
etree.tostring (elem, encoding = str)
devolverá str
pero no binary
en Python 3
También puede serializar a una cadena Unicode sin declaración por pasando la función
unicode
como codificación (ostr
en Py3), o el nombre 'unicode'. Esto cambia el valor de retorno de un byte cadena a una cadena unicode sin codificar.