summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@haypocalc.com>2011-07-03 23:45:39 (GMT)
committerVictor Stinner <victor.stinner@haypocalc.com>2011-07-03 23:45:39 (GMT)
commit6c471029821677e893a203a0127777735ff526c7 (patch)
tree2df9ccc41397a020f74b3677d49574d6dbec070d
parentbbdc08ea6e5d3f2d9058991a65b6011dfbb8d233 (diff)
downloadcpython-6c471029821677e893a203a0127777735ff526c7.zip
cpython-6c471029821677e893a203a0127777735ff526c7.tar.gz
cpython-6c471029821677e893a203a0127777735ff526c7.tar.bz2
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).
-rw-r--r--Lib/runpy.py2
-rw-r--r--Lib/test/test_runpy.py10
-rw-r--r--Misc/NEWS4
3 files changed, 15 insertions, 1 deletions
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.