2009-09-15 11 views
7

jestem przy użyciu Python 2.6.2 za xml.etree.cElementTree aby utworzyć dokument XML:kwestie Kodowanie przy etree.tostring Pythona

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') 

Pod koniec dnia, xml wygląda następująco:

<?xml version='1.0' encoding='UTF-8'?> 
<tag>W&#195;&#188;rth Elektronik Midcom</tag> 

Wygląda na to, że tostring zignorował parametr kodowania i zakodował "ü" w innym kodowaniu znaków ("ü" jest prawidłowym kodowaniem utf-8, jestem tego całkiem pewien).

Każda rada dotycząca tego, co robię źle, byłaby bardzo ceniona.

Odpowiedz

16

Kodujesz tekst dwukrotnie. Spróbuj tego:

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

etree.tostring(elem, encoding=str)

powróci str ale nie binary w Pythonie 3

Można również serialise na ciąg Unicode bez deklaracji przekazując funkcję unicode jako kodowania (lub str w Py3), lub nazwa "unicode". Powoduje to zmianę wartości zwracanej z ciągu bajtowego na niekodowany ciąg znaków Unicode.

Powiązane problemy