summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Doc/using/cmdline.rst12
-rw-r--r--Doc/whatsnew/3.2.rst6
-rw-r--r--Lib/test/test_os.py30
-rw-r--r--Lib/test/test_subprocess.py4
-rw-r--r--Lib/test/test_sys.py29
-rw-r--r--Misc/NEWS2
-rw-r--r--Modules/main.c3
-rw-r--r--Python/pythonrun.c22
8 files changed, 8 insertions, 100 deletions
diff --git a/Doc/using/cmdline.rst b/Doc/using/cmdline.rst
index 28df51d..7da1954 100644
--- a/Doc/using/cmdline.rst
+++ b/Doc/using/cmdline.rst
@@ -442,18 +442,6 @@ These environment variables influence Python's behavior.
import of source modules.
-.. envvar:: PYTHONFSENCODING
-
- If this is set before running the interpreter, it overrides the encoding used
- for the filesystem encoding (see :func:`sys.getfilesystemencoding`).
-
- This variable is not available (ignored) on Windows and Mac OS X: the
- filesystem encoding is pinned to ``'mbcs'`` on Windows and ``'utf-8'`` on
- Mac OS X.
-
- .. versionadded:: 3.2
-
-
.. envvar:: PYTHONIOENCODING
If this is set before running the interpreter, it overrides the encoding used
diff --git a/Doc/whatsnew/3.2.rst b/Doc/whatsnew/3.2.rst
index e5d79b6..9ac966d 100644
--- a/Doc/whatsnew/3.2.rst
+++ b/Doc/whatsnew/3.2.rst
@@ -569,12 +569,6 @@ A number of small performance enhancements have been added:
Filenames and Unicode
=====================
-The filesystem encoding can be specified by setting the
-:envvar:`PYTHONFSENCODING` environment variable before running the interpreter.
-The value is an encoding name, e.g. ``iso-8859-1``. This variable is not
-available (ignored) on Windows and Mac OS X: the filesystem encoding is pinned
-to ``'mbcs'`` on Windows and ``'utf-8'`` on Mac OS X.
-
The :mod:`os` module has two new functions: :func:`~os.fsencode` and
:func:`~os.fsdecode`.
diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py
index 342dada..768814c 100644
--- a/Lib/test/test_os.py
+++ b/Lib/test/test_os.py
@@ -1172,36 +1172,6 @@ class FSEncodingTests(unittest.TestCase):
continue
self.assertEquals(os.fsdecode(bytesfn), fn)
- def get_output(self, fs_encoding, func):
- env = os.environ.copy()
- env['PYTHONIOENCODING'] = 'utf-8'
- env['PYTHONFSENCODING'] = fs_encoding
- code = 'import os; print(%s, end="")' % func
- process = subprocess.Popen(
- [sys.executable, "-c", code],
- stdout=subprocess.PIPE, env=env)
- stdout, stderr = process.communicate()
- self.assertEqual(process.returncode, 0)
- return stdout.decode('utf-8')
-
- @unittest.skipIf(sys.platform in ('win32', 'darwin'),
- 'PYTHONFSENCODING is ignored on Windows and Mac OS X')
- def test_encodings(self):
- def check(encoding, bytesfn, unicodefn):
- encoded = self.get_output(encoding, 'repr(os.fsencode(%a))' % unicodefn)
- self.assertEqual(encoded, repr(bytesfn))
-
- decoded = self.get_output(encoding, 'repr(os.fsdecode(%a))' % bytesfn)
- self.assertEqual(decoded, repr(unicodefn))
-
- check('utf-8', b'\xc3\xa9\x80', '\xe9\udc80')
-
- # Raise SkipTest() if sys.executable is not encodable to ascii
- support.workaroundIssue8611()
-
- check('ascii', b'abc\xff', 'abc\udcff')
- check('iso-8859-15', b'\xef\xa4', '\xef\u20ac')
-
class PidTests(unittest.TestCase):
@unittest.skipUnless(hasattr(os, 'getppid'), "test needs os.getppid")
diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py
index fef0ed8..6eff9e2 100644
--- a/Lib/test/test_subprocess.py
+++ b/Lib/test/test_subprocess.py
@@ -885,10 +885,6 @@ class POSIXProcessTestCase(BaseTestCase):
script = "import os; print(ascii(os.getenv(%s)))" % repr(key)
env = os.environ.copy()
env[key] = value
- # Force surrogate-escaping of \xFF in the child process;
- # otherwise it can be decoded as-is if the default locale
- # is latin-1.
- env['PYTHONFSENCODING'] = 'ascii'
stdout = subprocess.check_output(
[sys.executable, "-c", script],
env=env)
diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py
index 639c9b0..6e8aa25 100644
--- a/Lib/test/test_sys.py
+++ b/Lib/test/test_sys.py
@@ -602,35 +602,6 @@ class SysModuleTest(unittest.TestCase):
expected = None
self.check_fsencoding(fs_encoding, expected)
- @unittest.skipIf(sys.platform in ('win32', 'darwin'),
- 'PYTHONFSENCODING is ignored on Windows and Mac OS X')
- def test_pythonfsencoding(self):
- def get_fsencoding(env):
- output = subprocess.check_output(
- [sys.executable, "-c",
- "import sys; print(sys.getfilesystemencoding())"],
- env=env)
- return output.rstrip().decode('ascii')
-
- # Raise SkipTest() if sys.executable is not encodable to ascii
- test.support.workaroundIssue8611()
-
- # Use C locale to get ascii for the locale encoding
- env = os.environ.copy()
- env['LC_ALL'] = 'C'
- try:
- del env['PYTHONFSENCODING']
- except KeyError:
- pass
- self.check_fsencoding(get_fsencoding(env), 'ascii')
-
- # Filesystem encoding is hardcoded on Windows and Mac OS X
- for encoding in ('ascii', 'cp850', 'iso8859-1', 'utf-8'):
- env = os.environ.copy()
- env['PYTHONFSENCODING'] = encoding
- self.check_fsencoding(get_fsencoding(env), encoding)
-
-
class SizeofTest(unittest.TestCase):
diff --git a/Misc/NEWS b/Misc/NEWS
index 5666c3e..142c9fc 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,8 @@ What's New in Python 3.2 Beta 1?
Core and Builtins
-----------------
+- Issue #9992: Remove PYTHONFSENCODING environment variable.
+
Library
-------
diff --git a/Modules/main.c b/Modules/main.c
index 4a10d93..c9499ac 100644
--- a/Modules/main.c
+++ b/Modules/main.c
@@ -99,9 +99,6 @@ static char *usage_5 =
" The default module search path uses %s.\n"
"PYTHONCASEOK : ignore case in 'import' statements (Windows).\n"
"PYTHONIOENCODING: Encoding[:errors] used for stdin/stdout/stderr.\n"
-#if !(defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)) && !defined(__APPLE__)
-"PYTHONFSENCODING: Encoding used for the filesystem.\n"
-#endif
;
static int
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index a888a19..012c1b8 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -980,22 +980,12 @@ initfsencoding(void)
char *codeset = NULL;
if (Py_FileSystemDefaultEncoding == NULL) {
- const char *env_encoding = Py_GETENV("PYTHONFSENCODING");
- if (env_encoding != NULL) {
- codeset = get_codec_name(env_encoding);
- if (!codeset) {
- fprintf(stderr, "PYTHONFSENCODING is not a valid encoding:\n");
- PyErr_Print();
- }
- }
- if (!codeset) {
- /* On Unix, set the file system encoding according to the
- user's preference, if the CODESET names a well-known
- Python codec, and Py_FileSystemDefaultEncoding isn't
- initialized by other means. Also set the encoding of
- stdin and stdout if these are terminals. */
- codeset = get_codeset();
- }
+ /* On Unix, set the file system encoding according to the
+ user's preference, if the CODESET names a well-known
+ Python codec, and Py_FileSystemDefaultEncoding isn't
+ initialized by other means. Also set the encoding of
+ stdin and stdout if these are terminals. */
+ codeset = get_codeset();
if (codeset != NULL) {
if (redecode_filenames(codeset))
Py_FatalError("Py_Initialize: can't redecode filenames");