* :mod:`sys`:
- * The :func:`~sys._enablelegacywindowsfsencoding` function
+ * The :func:`!_enablelegacywindowsfsencoding` function
has been deprecated since Python 3.13.
Use the :envvar:`PYTHONLEGACYWINDOWSFSENCODING` environment variable instead.
.. versionchanged:: 3.6
Windows is no longer guaranteed to return ``'mbcs'``. See :pep:`529`
- and :func:`_enablelegacywindowsfsencoding` for more information.
+ for more information.
.. versionchanged:: 3.7
Return ``'utf-8'`` if the :ref:`Python UTF-8 Mode <utf8-mode>` is
See :pep:`768` for more details.
-.. function:: _enablelegacywindowsfsencoding()
-
- Changes the :term:`filesystem encoding and error handler` to 'mbcs' and
- 'replace' respectively, for consistency with versions of Python prior to
- 3.6.
-
- This is equivalent to defining the :envvar:`PYTHONLEGACYWINDOWSFSENCODING`
- environment variable before launching Python.
-
- See also :func:`sys.getfilesystemencoding` and
- :func:`sys.getfilesystemencodeerrors`.
-
- .. availability:: Windows.
-
- .. note::
- Changing the filesystem encoding after Python startup is risky because
- the old fsencoding or paths encoded by the old fsencoding may be cached
- somewhere. Use :envvar:`PYTHONLEGACYWINDOWSFSENCODING` instead.
-
- .. versionadded:: 3.6
- See :pep:`529` for more details.
-
- .. deprecated-removed:: 3.13 3.16
- Use :envvar:`PYTHONLEGACYWINDOWSFSENCODING` instead.
-
.. data:: stdin
stdout
stderr
library/asyncio-task.html: terminating-a-task-group
# Removed APIs
-library/symtable.html: symtable.Class.get_methods
\ No newline at end of file
+library/symtable.html: symtable.Class.get_methods
+library/sys.html: sys._enablelegacywindowsfsencoding
\ No newline at end of file
'replace', respectively. Otherwise, the new defaults 'utf-8' and
'surrogatepass' are used.
- This may also be enabled at runtime with
- :func:`sys._enablelegacywindowsfsencoding`.
-
.. availability:: Windows.
.. versionadded:: 3.6
* :mod:`sys`:
- * Deprecate the :func:`~sys._enablelegacywindowsfsencoding` function,
+ * Deprecate the :func:`!_enablelegacywindowsfsencoding` function,
to be removed in Python 3.16.
Use the :envvar:`PYTHONLEGACYWINDOWSFSENCODING` environment variable instead.
(Contributed by Inada Naoki in :gh:`73427`.)
* The :meth:`!symtable.Class.get_methods` method
which has been deprecated since Python 3.14.
+sys
+---
+
+* The :func:`!_enablelegacywindowsfsencoding` function
+ which has been deprecated since Python 3.13.
+ Use the :envvar:`PYTHONLEGACYWINDOWSFSENCODING` environment variable instead.
+ (Contributed by Stan Ulbrych in :gh:`149595`.)
+
sysconfig
---------
:func:`os.fsencode` and :func:`os.fsdecode` to ensure their bytes are
correctly encoded. To revert to the previous behaviour, set
:envvar:`PYTHONLEGACYWINDOWSFSENCODING` or call
-:func:`sys._enablelegacywindowsfsencoding`.
+:func:`!sys._enablelegacywindowsfsencoding`.
See :pep:`529` for more information and discussion of code modifications that
may be required.
const char *errors);
extern void _Py_ClearFileSystemEncoding(void);
extern PyStatus _PyUnicode_InitEncodings(PyThreadState *tstate);
-#ifdef MS_WINDOWS
-extern int _PyUnicode_EnableLegacyWindowsFSEncoding(void);
-#endif
extern int _Py_IsLocaleCoercionTarget(const char *ctype_loc);
def test_no_duplicates_in_meta_path(self):
self.assertEqual(len(sys.meta_path), len(set(sys.meta_path)))
- @unittest.skipUnless(hasattr(sys, "_enablelegacywindowsfsencoding"),
- 'needs sys._enablelegacywindowsfsencoding()')
- def test__enablelegacywindowsfsencoding(self):
- code = ('import sys',
- 'sys._enablelegacywindowsfsencoding()',
- 'print(sys.getfilesystemencoding(), sys.getfilesystemencodeerrors())')
- rc, out, err = assert_python_ok('-c', '; '.join(code))
- out = out.decode('ascii', 'replace').rstrip()
- self.assertEqual(out, 'mbcs replace')
-
@support.requires_subprocess()
def test_orig_argv(self):
code = textwrap.dedent('''
.. nonce: WOpiNt
.. section: Windows
-Deprecate :func:`sys._enablelegacywindowsfsencoding`. Use
+Deprecate :func:`!sys._enablelegacywindowsfsencoding`. Use
:envvar:`PYTHONLEGACYWINDOWSFSENCODING` instead. Patch by Inada Naoki.
..
--- /dev/null
+Remove the :func:`!sys._enablelegacywindowsfsencoding` function which has
+been deprecated since Python 3.13.
}
-#ifdef MS_WINDOWS
-int
-_PyUnicode_EnableLegacyWindowsFSEncoding(void)
-{
- PyInterpreterState *interp = _PyInterpreterState_GET();
- PyConfig *config = (PyConfig *)_PyInterpreterState_GetConfig(interp);
-
- /* Set the filesystem encoding to mbcs/replace (PEP 529) */
- wchar_t *encoding = _PyMem_RawWcsdup(L"mbcs");
- wchar_t *errors = _PyMem_RawWcsdup(L"replace");
- if (encoding == NULL || errors == NULL) {
- PyMem_RawFree(encoding);
- PyMem_RawFree(errors);
- PyErr_NoMemory();
- return -1;
- }
-
- PyMem_RawFree(config->filesystem_encoding);
- config->filesystem_encoding = encoding;
- PyMem_RawFree(config->filesystem_errors);
- config->filesystem_errors = errors;
-
- return init_fs_codec(interp);
-}
-#endif
-
-
#ifdef Py_DEBUG
static inline int
unicode_is_finalizing(void)
#endif /* defined(MS_WINDOWS) */
-#if defined(MS_WINDOWS)
-
-PyDoc_STRVAR(sys__enablelegacywindowsfsencoding__doc__,
-"_enablelegacywindowsfsencoding($module, /)\n"
-"--\n"
-"\n"
-"Changes the default filesystem encoding to mbcs:replace.\n"
-"\n"
-"This is done for consistency with earlier versions of Python. See PEP\n"
-"529 for more information.\n"
-"\n"
-"This is equivalent to defining the PYTHONLEGACYWINDOWSFSENCODING\n"
-"environment variable before launching Python.");
-
-#define SYS__ENABLELEGACYWINDOWSFSENCODING_METHODDEF \
- {"_enablelegacywindowsfsencoding", (PyCFunction)sys__enablelegacywindowsfsencoding, METH_NOARGS, sys__enablelegacywindowsfsencoding__doc__},
-
-static PyObject *
-sys__enablelegacywindowsfsencoding_impl(PyObject *module);
-
-static PyObject *
-sys__enablelegacywindowsfsencoding(PyObject *module, PyObject *Py_UNUSED(ignored))
-{
- return sys__enablelegacywindowsfsencoding_impl(module);
-}
-
-#endif /* defined(MS_WINDOWS) */
-
#if defined(HAVE_DLOPEN)
PyDoc_STRVAR(sys_setdlopenflags__doc__,
#define SYS_GETWINDOWSVERSION_METHODDEF
#endif /* !defined(SYS_GETWINDOWSVERSION_METHODDEF) */
-#ifndef SYS__ENABLELEGACYWINDOWSFSENCODING_METHODDEF
- #define SYS__ENABLELEGACYWINDOWSFSENCODING_METHODDEF
-#endif /* !defined(SYS__ENABLELEGACYWINDOWSFSENCODING_METHODDEF) */
-
#ifndef SYS_SETDLOPENFLAGS_METHODDEF
#define SYS_SETDLOPENFLAGS_METHODDEF
#endif /* !defined(SYS_SETDLOPENFLAGS_METHODDEF) */
#ifndef SYS_GETANDROIDAPILEVEL_METHODDEF
#define SYS_GETANDROIDAPILEVEL_METHODDEF
#endif /* !defined(SYS_GETANDROIDAPILEVEL_METHODDEF) */
-/*[clinic end generated code: output=e8333fe10c01ae66 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=ba849b6e4b9f1ba3 input=a9049054013a1b77]*/
}
#pragma warning(pop)
-
-/*[clinic input]
-sys._enablelegacywindowsfsencoding
-
-Changes the default filesystem encoding to mbcs:replace.
-
-This is done for consistency with earlier versions of Python. See PEP
-529 for more information.
-
-This is equivalent to defining the PYTHONLEGACYWINDOWSFSENCODING
-environment variable before launching Python.
-[clinic start generated code]*/
-
-static PyObject *
-sys__enablelegacywindowsfsencoding_impl(PyObject *module)
-/*[clinic end generated code: output=f5c3855b45e24fe9 input=2bfa931a20704492]*/
-{
- if (PyErr_WarnEx(PyExc_DeprecationWarning,
- "sys._enablelegacywindowsfsencoding() is deprecated and will be "
- "removed in Python 3.16. Use PYTHONLEGACYWINDOWSFSENCODING "
- "instead.", 1))
- {
- return NULL;
- }
- if (_PyUnicode_EnableLegacyWindowsFSEncoding() < 0) {
- return NULL;
- }
- Py_RETURN_NONE;
-}
-
#endif /* MS_WINDOWS */
#ifdef HAVE_DLOPEN
SYS__GETFRAME_METHODDEF
SYS__GETFRAMEMODULENAME_METHODDEF
SYS_GETWINDOWSVERSION_METHODDEF
- SYS__ENABLELEGACYWINDOWSFSENCODING_METHODDEF
SYS__IS_IMMORTAL_METHODDEF
SYS_INTERN_METHODDEF
SYS__IS_INTERNED_METHODDEF
"
)
#endif /* MS_COREDLL */
-#ifdef MS_WINDOWS
-/* concatenating string here */
-PyDoc_STR(
-"_enablelegacywindowsfsencoding -- [Windows only]\n\
-"
-)
-#endif
PyDoc_STR(
"__stdin__ -- the original stdin; don't touch!\n\
__stdout__ -- the original stdout; don't touch!\n\