Index: Python/bltinmodule.c =================================================================== --- Python/bltinmodule.c (révision 84199) +++ Python/bltinmodule.c (copie de travail) @@ -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) { Index: Python/sysmodule.c =================================================================== --- Python/sysmodule.c (révision 84199) +++ Python/sysmodule.c (copie de travail) @@ -217,25 +217,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; @@ -1032,8 +1013,6 @@ #endif {"setdefaultencoding", sys_setdefaultencoding, METH_VARARGS, setdefaultencoding_doc}, - {"setfilesystemencoding", sys_setfilesystemencoding, METH_VARARGS, - setfilesystemencoding_doc}, {"setcheckinterval", sys_setcheckinterval, METH_VARARGS, setcheckinterval_doc}, {"getcheckinterval", sys_getcheckinterval, METH_NOARGS, Index: Include/fileobject.h =================================================================== --- Include/fileobject.h (révision 84199) +++ Include/fileobject.h (copie de travail) @@ -21,7 +21,6 @@ */ PyAPI_DATA(const char *) Py_FileSystemDefaultEncoding; PyAPI_DATA(int) Py_HasFileSystemDefaultEncoding; -PyAPI_FUNC(int) _Py_SetFileSystemEncoding(PyObject *); /* Internal API Index: Misc/NEWS =================================================================== --- Misc/NEWS (révision 84199) +++ Misc/NEWS (copie de travail) @@ -117,6 +117,11 @@ Library ------- +- Issue #9632: Remove sys.setfilesystemencoding() function: use + PYTHONFSENCODING environment variable to set the filesystem encoding at + Python startup. sys.setfilesystemencoding() is unable to reencode all + filenames in all objects and so creates inconsistencies. + - Create os.fsdecode(): decode from the filesystem encoding with surrogateescape error handler, or strict error handler on Windows. Index: Doc/library/sys.rst =================================================================== --- Doc/library/sys.rst (révision 84199) +++ Doc/library/sys.rst (copie de travail) @@ -736,15 +736,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:: Index: Lib/test/test_sys.py =================================================================== --- Lib/test/test_sys.py (révision 84199) +++ Lib/test/test_sys.py (copie de travail) @@ -609,17 +609,6 @@ 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):