diff --git a/Lib/test/support.py b/Lib/test/support.py
index d0e84c7..814d061 100644
--- a/Lib/test/support.py
+++ b/Lib/test/support.py
@@ -1277,3 +1277,11 @@
     """
     stderr = re.sub(br"\[\d+ refs\]\r?\n?$", b"", stderr).strip()
     return stderr
+
+def workaroundIssue8611():
+    try:
+        sys.executable.encode('ascii')
+    except UnicodeEncodeError:
+        raise unittest.SkipTest(
+            "Issue #8611: Python doesn't support ascii locale encoding "
+            "with an non-ascii path")
diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py
index 4ab6593..6ce0d5f 100644
--- a/Lib/test/test_os.py
+++ b/Lib/test/test_os.py
@@ -1175,15 +1175,12 @@
             self.assertEqual(decoded, repr(unicodefn))
 
         check('utf-8', b'\xc3\xa9\x80', '\xe9\udc80')
-        try:
-            sys.executable.encode("ascii")
-        except UnicodeEncodeError:
-            # Python doesn't start with ASCII locale if its path is not ASCII,
-            # see issue #8611
-            pass
-        else:
-            check('ascii', b'abc\xff', 'abc\udcff')
-            check('iso-8859-15', b'\xef\xa4', '\xef\u20ac')
+
+        # Raise SkipTest() if sys.executable is not encodable to ascii
+        support.workaroundIssue8611()
+
+        check('ascii', b'abc\xff', 'abc\udcff')
+        check('iso-8859-15', b'\xef\xa4', '\xef\u20ac')
 
 
 def test_main():
diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py
index e09601f..294814d 100644
--- a/Lib/test/test_sys.py
+++ b/Lib/test/test_sys.py
@@ -496,11 +496,16 @@
         self.assertRaises(TypeError, sys.intern, S("abc"))
 
     def test_undecodable_code(self):
-        non_decodable = b"\xff"
+        # Raise SkipTest() if sys.executable is not encodable to ascii
+        test.support.workaroundIssue8611()
+
+        undecodable = b"\xff"
         env = os.environ.copy()
         env['LANG'] = 'C'
-        code = b'import locale; '
-        code += b'print(ascii("' + non_decodable + b'"), locale.getpreferredencoding())'
+        code = (
+            b'import locale; '
+            b'print(ascii("' + undecodable + b'"), '
+                b'locale.getpreferredencoding())')
         p = subprocess.Popen(
             [sys.executable, "-c", code],
             stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
@@ -587,28 +592,23 @@
                 env=env)
             return output.rstrip().decode('ascii')
 
+        # Raise SkipTest() if sys.executable is not encodable to ascii
+        test.support.workaroundIssue8611()
+
+        # Even in C locale
+        env = os.environ.copy()
+        env['LANG'] = 'C'
         try:
-            sys.executable.encode('ascii')
-        except UnicodeEncodeError:
-            # Python doesn't start with ASCII locale if its path is not ASCII,
-            # see issue #8611
+            del env['PYTHONFSENCODING']
+        except KeyError:
             pass
-        else:
-            # Even in C locale
+        self.check_fsencoding(get_fsencoding(env), 'ascii')
+
+        # Filesystem encoding is hardcoded on Windows and Mac OS X
+        for encoding in ('ascii', 'cp850', 'iso8859-1', 'utf-8'):
             env = os.environ.copy()
-            env['LANG'] = 'C'
-            try:
-                del env['PYTHONFSENCODING']
-            except KeyError:
-                pass
-            self.check_fsencoding(get_fsencoding(env), 'ascii')
-
-            # Filesystem encoding is hardcoded on Windows and Mac OS X
-            for encoding in ('ascii', 'cp850', 'iso8859-1', 'utf-8'):
-                env = os.environ.copy()
-                env['PYTHONFSENCODING'] = encoding
-                self.check_fsencoding(get_fsencoding(env), encoding)
-
+            env['PYTHONFSENCODING'] = encoding
+            self.check_fsencoding(get_fsencoding(env), encoding)
 
     def test_setfilesystemencoding(self):
         old = sys.getfilesystemencoding()
