Codificação problemas com etree.tostring de python
Pergunta
Eu estou usando xml.etree.cElementTree python 2.6.2 do para criar um 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')
No final do dia, os olhares XML como:
<?xml version='1.0' encoding='UTF-8'?>
<tag>Würth Elektronik Midcom</tag>
Parece que tostring ignorado o parâmetro de codificação e codificado 'U' em alguma outra codificação de caracteres ( 'U' é um válido codificação UTF-8, estou bastante certeza).
Qualquer conselhos sobre o que estou fazendo de errado seria muito apreciada.
Solução
Você está codificar o texto duas vezes. Tente isto:
import xml.etree.cElementTree as etree
elem = etree.Element('tag')
elem.text = u"Würth Elektronik Midcom"
xml = etree.tostring(elem,encoding='UTF-8')
Outras dicas
etree.tostring(elem, encoding=str)
retornará str
mas não binary
em Python 3
Você também pode serialise a uma seqüência de caracteres Unicode sem declaração passando a função
unicode
como codificando (oustr
em PY3), ou o nome 'unicode'. Isso muda o valor de retorno de um byte string para uma string unicode não codificada.