Browse Source

[trac710] make sure in xml_handler() the textual representation of XML
is a correct string (not bytes, not a string in the form of "b'XXX'")
regardless of whether xml.etree.ElementTree.tostring() returns bytes or
string by default.

JINMEI Tatuya 14 years ago
parent
commit
ed6ec070b2
1 changed files with 8 additions and 1 deletions
  1. 8 1
      src/bin/stats/stats_httpd.py.in

+ 8 - 1
src/bin/stats/stats_httpd.py.in

@@ -437,8 +437,15 @@ class StatsHttpd:
             (k, v) = (str(k), str(v))
             elem = xml.etree.ElementTree.Element(k)
             elem.text = v
+            # The coding conversion is tricky. xml..tostring() of Python 3.2
+            # returns bytes (not string) regardless of the coding, while
+            # tostring() of Python 3.1 returns a string.  To support both
+            # cases transparently, we first make sure tostring() returns
+            # bytes by specifying utf-8 and then convert the result to a
+            # plain string (code below assume it).
             xml_list.append(
-                str(xml.etree.ElementTree.tostring(elem)))
+                str(xml.etree.ElementTree.tostring(elem, encoding='utf-8'),
+                    encoding='us-ascii'))
         xml_string = "".join(xml_list)
         self.xml_body = self.open_template(XML_TEMPLATE_LOCATION).substitute(
             xml_string=xml_string,