diff --git a/Lib/test/test_sax.py b/Lib/test/test_sax.py
index e235a0b..0261c6a 100644
--- a/Lib/test/test_sax.py
+++ b/Lib/test/test_sax.py
@@ -15,6 +15,7 @@
 from xml.sax.handler import feature_namespaces
 from xml.sax.xmlreader import InputSource, AttributesImpl, AttributesNSImpl
 from io import BytesIO, StringIO
+import codecs
 import os.path
 import shutil
 from test import support
@@ -538,6 +539,34 @@
         def getvalue(self):
             return b''.join(self)
 
+class StreamWriterXmlgenTest(XmlgenTest, unittest.TestCase):
+    def ioclass(self):
+        raw = BytesIO()
+        writer = codecs.getwriter('ascii')(raw, 'xmlcharrefreplace')
+        writer.getvalue = raw.getvalue
+        return writer
+
+    def xml(self, doc, encoding='iso-8859-1'):
+        return ('<?xml version="1.0" encoding="%s"?>\n%s' %
+                (encoding, doc)).encode('ascii', 'xmlcharrefreplace')
+
+class StreamReaderWriterXmlgenTest(XmlgenTest, unittest.TestCase):
+    fname = support.TESTFN + '-codecs'
+
+    def ioclass(self):
+        writer = codecs.open(self.fname, 'w', encoding='ascii',
+                             errors='xmlcharrefreplace', buffering=0)
+        self.addCleanup(support.unlink, self.fname)
+        writer.getvalue = self.getvalue
+        return writer
+
+    def getvalue(self):
+        with open(self.fname, 'rb') as f:
+            return f.read()
+
+    def xml(self, doc, encoding='iso-8859-1'):
+        return ('<?xml version="1.0" encoding="%s"?>\n%s' %
+                (encoding, doc)).encode('ascii', 'xmlcharrefreplace')
 
 start = b'<?xml version="1.0" encoding="iso-8859-1"?>\n'
 
@@ -946,6 +975,8 @@
                  StringXmlgenTest,
                  BytesXmlgenTest,
                  WriterXmlgenTest,
+                 StreamWriterXmlgenTest,
+                 StreamReaderWriterXmlgenTest,
                  ExpatReaderTest,
                  ErrorReportingTest,
                  XmlReaderTest)
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
diff --git a/Misc/NEWS b/Misc/NEWS
index 4c88a54..e3b860a 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -91,6 +91,9 @@
 Library
 -------
 
+- Issue #17915: Fix interoperability of xml.sax with file objects returned by
+  codecs.open().
+
 - Issue #16601: Restarting iteration over tarfile no more continues from where
   it left off.  Patch by Michael Birtwell.
 
@@ -280,6 +283,12 @@
 - Issue #17692: test_sqlite now works with unittest test discovery.
   Patch by Zachary Ware.
 
+
+Documentation
+-------------
+
+- Issue #15940: Specify effect of locale on time functions.
+
 - Issue #6696: add documentation for the Profile objects, and improve
   profile/cProfile docs.  Patch by Tom Pinckney.
 
