[Jython-checkins] jython: Args in sys.argv are now unicode if characters > 127
jim.baker
jython-checkins at python.org
Thu Jan 15 03:08:38 CET 2015
https://hg.python.org/jython/rev/d3473cb18d9e
changeset: 7531:d3473cb18d9e
user: Jim Baker <jim.baker at rackspace.com>
date: Wed Jan 14 19:08:24 2015 -0700
summary:
Args in sys.argv are now unicode if characters > 127
As was seen in similar fixes for os.environ and os.listdir, Java
presents command line arguments as java.lang.String, with additional
encoding. For each argument in sys.argv, convert to str if ascii
(maintaining current behavior), otherwise unicode.
Fixes http://bugs.jython.org/issue2252
files:
Lib/test/test_sys_jy.py | 27 ++++++++++---
src/org/python/core/PySystemState.java | 2 +-
2 files changed, 22 insertions(+), 7 deletions(-)
diff --git a/Lib/test/test_sys_jy.py b/Lib/test/test_sys_jy.py
--- a/Lib/test/test_sys_jy.py
+++ b/Lib/test/test_sys_jy.py
@@ -2,6 +2,7 @@
from __future__ import with_statement
import os
import re
+import subprocess
import sys
import tempfile
import unittest
@@ -240,15 +241,29 @@
self.assertEqual(check(0xa2, None, "backslashreplace"), r"\xa2")
self.assertEqual(check(0xa2, "cp850"), "\xbd")
+class SysArgvTest(unittest.TestCase):
+ def test_unicode_argv(self):
+ """Unicode roundtrips successfully through sys.argv arguments"""
+ zhongwen = u'\u4e2d\u6587'
+ with test_support.temp_cwd(name=u"tempcwd-%s" % zhongwen):
+ p = subprocess.Popen(
+ [sys.executable, '-c',
+ 'import sys;' \
+ 'sys.stdout.write(sys.argv[1].encode("utf-8"))',
+ zhongwen],
+ stdout=subprocess.PIPE)
+ self.assertEqual(p.stdout.read().decode("utf-8"), zhongwen)
+
def test_main():
test_support.run_unittest(
- SysTest,
- ShadowingTest,
- SyspathResourceTest,
- SyspathUnicodeTest,
- SysEncodingTest,
- )
+ SysTest,
+ ShadowingTest,
+ SyspathResourceTest,
+ SyspathUnicodeTest,
+ SysEncodingTest,
+ SysArgvTest
+ )
if __name__ == "__main__":
test_main()
diff --git a/src/org/python/core/PySystemState.java b/src/org/python/core/PySystemState.java
--- a/src/org/python/core/PySystemState.java
+++ b/src/org/python/core/PySystemState.java
@@ -1130,7 +1130,7 @@
PyList argv = new PyList();
if (args != null) {
for (String arg : args) {
- argv.append(new PyString(arg));
+ argv.append(Py.newStringOrUnicode(arg));
}
}
return argv;
--
Repository URL: https://hg.python.org/jython
More information about the Jython-checkins
mailing list