Issue 2918: Merge StringIO and cStringIO.
diff --git a/Lib/xml/dom/minidom.py b/Lib/xml/dom/minidom.py
index f229369..3025ed7 100644
--- a/Lib/xml/dom/minidom.py
+++ b/Lib/xml/dom/minidom.py
@@ -14,6 +14,7 @@
  * SAX 2 namespaces
 """
 
+import codecs
 import io
 import xml.dom
 
@@ -49,16 +50,16 @@
         # indent = the indentation string to prepend, per level
         # newl = the newline string to append
         use_encoding = "utf-8" if encoding is None else encoding
-        writer = io.StringIO(encoding=use_encoding)
+        writer = codecs.getwriter(use_encoding)(io.BytesIO())
         if self.nodeType == Node.DOCUMENT_NODE:
             # Can pass encoding only to document, to put it into XML header
             self.writexml(writer, "", indent, newl, encoding)
         else:
             self.writexml(writer, "", indent, newl)
         if encoding is None:
-            return writer.getvalue()
+            return writer.stream.getvalue().decode(use_encoding)
         else:
-            return writer.buffer.getvalue()
+            return writer.stream.getvalue()
 
     def hasChildNodes(self):
         if self.childNodes: