diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst
index 09dd844..ad61377 100644
--- a/Doc/library/sys.rst
+++ b/Doc/library/sys.rst
@@ -724,15 +724,6 @@
    :file:`/usr/include/dlfcn.h` using the :program:`h2py` script. Availability:
    Unix.
 
-.. function:: setfilesystemencoding(enc)
-
-   Set the encoding used when converting Python strings to file names to *enc*.
-   By default, Python tries to determine the encoding it should use automatically
-   on Unix; on Windows, it avoids such conversion completely. This function can
-   be used when Python's determination of the encoding needs to be overwritten,
-   e.g. when not all file names on disk can be decoded using the encoding that
-   Python had chosen.
-
 .. function:: setprofile(profilefunc)
 
    .. index::
diff --git a/Include/fileobject.h b/Include/fileobject.h
index 6e0e55e..20545fa 100644
--- a/Include/fileobject.h
+++ b/Include/fileobject.h
@@ -21,7 +21,6 @@
 */
 PyAPI_DATA(const char *) Py_FileSystemDefaultEncoding;
 PyAPI_DATA(int) Py_HasFileSystemDefaultEncoding;
-PyAPI_FUNC(int) _Py_SetFileSystemEncoding(PyObject *);
 
 /* Internal API
 
diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py
index 8cfbaaf..639c9b0 100644
--- a/Lib/test/test_sys.py
+++ b/Lib/test/test_sys.py
@@ -630,17 +630,6 @@
             env['PYTHONFSENCODING'] = encoding
             self.check_fsencoding(get_fsencoding(env), encoding)
 
-    def test_setfilesystemencoding(self):
-        old = sys.getfilesystemencoding()
-        try:
-            sys.setfilesystemencoding("iso-8859-1")
-            self.assertEqual(sys.getfilesystemencoding(), "iso-8859-1")
-        finally:
-            sys.setfilesystemencoding(old)
-        try:
-            self.assertRaises(LookupError, sys.setfilesystemencoding, "xxx")
-        finally:
-            sys.setfilesystemencoding(old)
 
 
 class SizeofTest(unittest.TestCase):
diff --git a/Misc/NEWS b/Misc/NEWS
index 11a14f2..579fc04 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -29,6 +29,11 @@
 Library
 -------
 
+- Issue #9632: Remove sys.setfilesystemencoding() function: use
+  PYTHONFSENCODING environment variable to set the filesystem encoding at
+  Python startup. sys.setfilesystemencoding() creates inconsistencies because
+  it is unable to reencode all filenames in all objects.
+
 - Issue #9410: Various optimizations to the pickle module, leading to
   speedups up to 4x (depending on the benchmark).  Mostly ported from
   Unladen Swallow; initial patch by Alexandre Vassalotti.
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index 3bcb08e..60bceb7 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -33,29 +33,6 @@
 int Py_HasFileSystemDefaultEncoding = 1;
 #endif
 
-int
-_Py_SetFileSystemEncoding(PyObject *s)
-{
-    PyObject *defenc, *codec;
-    if (!PyUnicode_Check(s)) {
-        PyErr_BadInternalCall();
-        return -1;
-    }
-    defenc = _PyUnicode_AsDefaultEncodedString(s, NULL);
-    if (!defenc)
-        return -1;
-    codec = _PyCodec_Lookup(PyBytes_AsString(defenc));
-    if (codec == NULL)
-        return -1;
-    Py_DECREF(codec);
-    if (!Py_HasFileSystemDefaultEncoding && Py_FileSystemDefaultEncoding)
-        /* A file system encoding was set at run-time */
-        free((char*)Py_FileSystemDefaultEncoding);
-    Py_FileSystemDefaultEncoding = strdup(PyBytes_AsString(defenc));
-    Py_HasFileSystemDefaultEncoding = 0;
-    return 0;
-}
-
 static PyObject *
 builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds)
 {
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index 90c165a..4e428f0 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -199,25 +199,6 @@
 );
 
 static PyObject *
-sys_setfilesystemencoding(PyObject *self, PyObject *args)
-{
-    PyObject *new_encoding;
-    if (!PyArg_ParseTuple(args, "U:setfilesystemencoding", &new_encoding))
-        return NULL;
-    if (_Py_SetFileSystemEncoding(new_encoding))
-        return NULL;
-    Py_INCREF(Py_None);
-    return Py_None;
-}
-
-PyDoc_STRVAR(setfilesystemencoding_doc,
-"setfilesystemencoding(string) -> None\n\
-\n\
-Set the encoding used to convert Unicode filenames in\n\
-operating system filenames."
-);
-
-static PyObject *
 sys_intern(PyObject *self, PyObject *args)
 {
     PyObject *s;
@@ -1012,8 +993,6 @@
 #ifdef USE_MALLOPT
     {"mdebug",          sys_mdebug, METH_VARARGS},
 #endif
-    {"setfilesystemencoding", sys_setfilesystemencoding, METH_VARARGS,
-     setfilesystemencoding_doc},
     {"setcheckinterval",        sys_setcheckinterval, METH_VARARGS,
      setcheckinterval_doc},
     {"getcheckinterval",        sys_getcheckinterval, METH_NOARGS,
