mirror of
https://github.com/python/cpython.git
synced 2025-07-24 11:44:31 +00:00
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.
This commit is contained in:
parent
6246d6dcb0
commit
5b519e0201
6 changed files with 5 additions and 65 deletions
|
@ -724,15 +724,6 @@ always available.
|
|||
: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::
|
||||
|
|
|
@ -21,7 +21,6 @@ PyAPI_FUNC(char *) Py_UniversalNewlineFgets(char *, int, FILE*, PyObject *);
|
|||
*/
|
||||
PyAPI_DATA(const char *) Py_FileSystemDefaultEncoding;
|
||||
PyAPI_DATA(int) Py_HasFileSystemDefaultEncoding;
|
||||
PyAPI_FUNC(int) _Py_SetFileSystemEncoding(PyObject *);
|
||||
|
||||
/* Internal API
|
||||
|
||||
|
|
|
@ -630,17 +630,6 @@ class SysModuleTest(unittest.TestCase):
|
|||
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):
|
||||
|
|
|
@ -29,6 +29,11 @@ Core and Builtins
|
|||
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.
|
||||
|
|
|
@ -33,29 +33,6 @@ const char *Py_FileSystemDefaultEncoding = "utf-8";
|
|||
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)
|
||||
{
|
||||
|
|
|
@ -198,25 +198,6 @@ Return the encoding used to convert Unicode filenames in\n\
|
|||
operating system filenames."
|
||||
);
|
||||
|
||||
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)
|
||||
{
|
||||
|
@ -1012,8 +993,6 @@ static PyMethodDef sys_methods[] = {
|
|||
#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,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue