diff --git a/Lib/compileall.py b/Lib/compileall.py
index 9451a60..2432842 100644
--- a/Lib/compileall.py
+++ b/Lib/compileall.py
@@ -77,7 +77,10 @@
                         print('*** Error compiling', fullname, '...')
                     else:
                         print('*** ', end='')
-                    print(err.msg)
+                    # escape non-printable characters in msg
+                    msg = err.msg.encode(sys.stdout.encoding, 'backslashreplace')
+                    msg = msg.decode(sys.stdout.encoding)
+                    print(msg)
                     success = 0
                 except (SyntaxError, UnicodeError, IOError) as e:
                     if quiet:
diff --git a/Lib/test/test_compileall.py b/Lib/test/test_compileall.py
index 49b6448..fe1dcf7 100644
--- a/Lib/test/test_compileall.py
+++ b/Lib/test/test_compileall.py
@@ -1,3 +1,4 @@
+import sys
 import compileall
 import imp
 import os
@@ -9,6 +10,7 @@
 import time
 from test import support
 import unittest
+import io
 
 
 class CompileallTests(unittest.TestCase):
@@ -55,8 +57,30 @@
         self.recreation_check(b'\0\0\0\0')
 
 
+class EncodingTest(unittest.TestCase):
+    'Issue 6716: compileall should escape source code when printing errors to stdout.'
+
+    def setUp(self):
+        self.directory = tempfile.mkdtemp()
+        self.source_path = os.path.join(self.directory, '_test.py')
+        with open(self.source_path, 'w', encoding='utf-8') as file:
+            file.write('# -*- coding: utf-8 -*-\n')
+            file.write('print u"\u20ac"\n')
+
+    def tearDown(self):
+        shutil.rmtree(self.directory)
+
+    def test_error(self):
+        try:
+            orig_stdout = sys.stdout
+            sys.stdout = io.TextIOWrapper(io.BytesIO(),encoding='ascii')
+            compileall.compile_dir(self.directory)
+        finally:
+            sys.stdout = orig_stdout
+
 def test_main():
-    support.run_unittest(CompileallTests)
+    support.run_unittest(CompileallTests,
+                         EncodingTest)
 
 
 if __name__ == "__main__":
diff --git a/Misc/NEWS b/Misc/NEWS
index 9d42ce6..57d084d 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -9,9 +9,17 @@
 
 *Release date: 20XX-XX-XX*
 
+Library
+-------
+
+- Issue #6716/2: Backslash-replace error output in compilall.
+
 Build
 -----
 
+- Issue #6716: Quote -x arguments of compileall in MSI installer.
+  Exclude 2to3 tests from compileall.
+
 - Issue #1628484: The Makefile doesn't ignore the CFLAGS environment
   variable anymore.  It also forwards the LDFLAGS settings to the linker
   when building a shared library.
diff --git a/Tools/msi/msi.py b/Tools/msi/msi.py
index cd67e99..027af07 100644
--- a/Tools/msi/msi.py
+++ b/Tools/msi/msi.py
@@ -403,7 +403,7 @@
               ("VerdanaRed9", "Verdana", 9, 255, 0),
              ])
 
-    compileargs = r'-Wi "[TARGETDIR]Lib\compileall.py" -f -x bad_coding|badsyntax|site-packages|py2_ "[TARGETDIR]Lib"'
+    compileargs = r'-Wi "[TARGETDIR]Lib\compileall.py" -f -x "bad_coding|badsyntax|site-packages|py2_|lib2to3\\tests" "[TARGETDIR]Lib"'
     lib2to3args = r'-c "import lib2to3.pygram, lib2to3.patcomp;lib2to3.patcomp.PatternCompiler()"'
     # See "CustomAction Table"
     add_data(db, "CustomAction", [
