Use locale encoding if Py_FileSystemDefaultEncoding is not set

 * PyUnicode_EncodeFSDefault(), PyUnicode_DecodeFSDefaultAndSize() and
   PyUnicode_DecodeFSDefault() use the locale encoding instead of UTF-8 if
   Py_FileSystemDefaultEncoding is NULL
 * redecode_filenames() functions and _Py_code_object_list (issue #9630)
   are no more needed: remove them
diff --git a/Objects/codeobject.c b/Objects/codeobject.c
index 470bf56..e24fc8d 100644
--- a/Objects/codeobject.c
+++ b/Objects/codeobject.c
@@ -5,8 +5,6 @@
 #define NAME_CHARS \
     "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"
 
-PyObject *_Py_code_object_list = NULL;
-
 /* all_name_chars(s): true iff all chars in s are valid NAME_CHARS */
 
 static int
@@ -111,17 +109,6 @@
         co->co_lnotab = lnotab;
         co->co_zombieframe = NULL;
         co->co_weakreflist = NULL;
-
-        if (_Py_code_object_list != NULL) {
-            int err;
-            PyObject *ref = PyWeakref_NewRef((PyObject*)co, NULL);
-            if (ref == NULL)
-                goto error;
-            err = PyList_Append(_Py_code_object_list, ref);
-            Py_DECREF(ref);
-            if (err)
-                goto error;
-        }
     }
     return co;
 
diff --git a/Objects/object.c b/Objects/object.c
index e322e53..ff3363f 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -1604,10 +1604,6 @@
     if (PyType_Ready(&PyCode_Type) < 0)
         Py_FatalError("Can't initialize code type");
 
-    _Py_code_object_list = PyList_New(0);
-    if (_Py_code_object_list == NULL)
-        Py_FatalError("Can't initialize code type");
-
     if (PyType_Ready(&PyFrame_Type) < 0)
         Py_FatalError("Can't initialize frame type");
 
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index a18eeef..98427e3 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -1597,11 +1597,22 @@
                                          "surrogateescape");
     }
     else {
-        /* if you change the default encoding, update also
-           PyUnicode_DecodeFSDefaultAndSize() and redecode_filenames() */
-        return PyUnicode_EncodeUTF8(PyUnicode_AS_UNICODE(unicode),
-                                    PyUnicode_GET_SIZE(unicode),
-                                    "surrogateescape");
+        /* locale encoding with surrogateescape */
+        wchar_t *wchar;
+        char *bytes;
+        PyObject *bytes_obj;
+
+        wchar = PyUnicode_AsWideCharString(unicode, NULL);
+        if (wchar == NULL)
+            return NULL;
+        bytes = _Py_wchar2char(wchar);
+        PyMem_Free(wchar);
+        if (bytes == NULL)
+            return NULL;
+
+        bytes_obj = PyBytes_FromString(bytes);
+        PyMem_Free(bytes);
+        return bytes_obj;
     }
 }
 
@@ -1769,9 +1780,22 @@
                                 "surrogateescape");
     }
     else {
-        /* if you change the default encoding, update also
-           PyUnicode_EncodeFSDefault() and redecode_filenames() */
-        return PyUnicode_DecodeUTF8(s, size, "surrogateescape");
+        /* locale encoding with surrogateescape */
+        wchar_t *wchar;
+        PyObject *unicode;
+
+        if (s[size] != '\0' || size != strlen(s)) {
+            PyErr_SetString(PyExc_TypeError, "embedded NUL character");
+            return NULL;
+        }
+
+        wchar = _Py_char2wchar(s);
+        if (wchar == NULL)
+            return NULL;
+
+        unicode = PyUnicode_FromWideChar(wchar, -1);
+        PyMem_Free(wchar);
+        return unicode;
     }
 }