2009-09-15 33 views
7

Tôi đang sử dụng xml.etree.cElementTree python 2.6.2 để tạo ra một tài liệu xml:vấn đề Encoding với etree.tostring python của

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

Vào cuối ngày, xml trông giống như:

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

Dường như chuỗi bị bỏ qua tham số mã hóa và được mã hóa 'ü' thành một số mã hóa ký tự khác ('ü' là mã hóa utf-8 hợp lệ, tôi khá chắc chắn).

Bất kỳ lời khuyên nào về những gì tôi đang làm sai sẽ được đánh giá cao.

Trả lời

16

Bạn đang mã hóa văn bản hai lần. Hãy thử điều này:

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)

sẽ trở lại str nhưng không binary bằng Python 3

Bạn cũng có thể serialise thành một chuỗi Unicode mà không khai báo bởi đi qua các chức năng unicode như mã hóa (hoặc str trong Py3), hoặc tên 'unicode'. Điều này thay đổi giá trị trả lại từ một chuỗi byte thành chuỗi unicode unicode.

Các vấn đề liên quan