Issue #17915: Fix interoperability of xml.sax with file objects returned by
codecs.open().
diff --git a/Lib/xml/sax/saxutils.py b/Lib/xml/sax/saxutils.py
index a62183a..0798ecd 100644
--- a/Lib/xml/sax/saxutils.py
+++ b/Lib/xml/sax/saxutils.py
@@ -5,6 +5,7 @@
 
 import os, urllib.parse, urllib.request
 import io
+import codecs
 from . import handler
 from . import xmlreader
 
@@ -77,6 +78,10 @@
         # use a text writer as is
         return out
 
+    if isinstance(out, (codecs.StreamWriter, codecs.StreamReaderWriter)):
+        # use a codecs stream writer as is
+        return out
+
     # wrap a binary writer with TextIOWrapper
     if isinstance(out, io.RawIOBase):
         # Keep the original file open when the TextIOWrapper is