From 6c471029821677e893a203a0127777735ff526c7 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 4 Jul 2011 01:45:39 +0200 Subject: Issue #12451: runpy: run_path() now opens the Python script in binary mode, instead of text mode using the locale encoding, to support other encodings than UTF-8 (scripts using the coding cookie). --- Lib/runpy.py | 2 +- Lib/test/test_runpy.py | 10 ++++++++++ Misc/NEWS | 4 ++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Lib/runpy.py b/Lib/runpy.py index 4738df3..31e5e55 100644 --- a/Lib/runpy.py +++ b/Lib/runpy.py @@ -226,7 +226,7 @@ def _get_code_from_file(fname): code = read_code(f) if code is None: # That didn't work, so try it as normal source code - with open(fname, "rU") as f: + with open(fname, "rb") as f: code = compile(f.read(), fname, 'exec') return code diff --git a/Lib/test/test_runpy.py b/Lib/test/test_runpy.py index ad3ab39..7ffb6af 100644 --- a/Lib/test/test_runpy.py +++ b/Lib/test/test_runpy.py @@ -405,6 +405,16 @@ argv0 = sys.argv[0] msg = "recursion depth exceeded" self.assertRaisesRegex(RuntimeError, msg, run_path, zip_name) + def test_encoding(self): + with temp_dir() as script_dir: + filename = os.path.join(script_dir, 'script.py') + with open(filename, 'w', encoding='latin1') as f: + f.write(""" +#coding:latin1 +"non-ASCII: h\xe9" +""") + result = run_path(filename) + self.assertEqual(result['__doc__'], "non-ASCII: h\xe9") def test_main(): diff --git a/Misc/NEWS b/Misc/NEWS index 1d76698..b233650 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -19,6 +19,10 @@ Core and Builtins Library ------- +- Issue #12451: runpy: run_path() now opens the Python script in binary mode, + instead of text mode using the locale encoding, to support other encodings + than UTF-8 (scripts using the coding cookie). + - Issue #12451: xml.dom.pulldom: parse() now opens files in binary mode instead of the text mode (using the locale encoding) to avoid encoding issues. -- cgit v0.12