diff options
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/json/tool.py | 3 | ||||
-rw-r--r-- | Lib/test/test_json/test_tool.py | 22 |
2 files changed, 25 insertions, 0 deletions
diff --git a/Lib/json/tool.py b/Lib/json/tool.py index 2a404a4..5542ce4 100644 --- a/Lib/json/tool.py +++ b/Lib/json/tool.py @@ -30,6 +30,8 @@ def main(): default=sys.stdout) parser.add_argument('--sort-keys', action='store_true', default=False, help='sort the output of dictionaries alphabetically by key') + parser.add_argument('--no-ensure-ascii', dest='ensure_ascii', action='store_false', + help='disable escaping of non-ASCII characters') parser.add_argument('--json-lines', action='store_true', default=False, help='parse input using the jsonlines format') group = parser.add_mutually_exclusive_group() @@ -49,6 +51,7 @@ def main(): dump_args = { 'sort_keys': options.sort_keys, 'indent': options.indent, + 'ensure_ascii': options.ensure_ascii, } if options.compact: dump_args['indent'] = None diff --git a/Lib/test/test_json/test_tool.py b/Lib/test/test_json/test_tool.py index 953a569..54800ae 100644 --- a/Lib/test/test_json/test_tool.py +++ b/Lib/test/test_json/test_tool.py @@ -190,3 +190,25 @@ class TestTool(unittest.TestCase): json_stdout, err = proc.communicate(json_stdin) self.assertEqual(expect.splitlines(), json_stdout.splitlines()) self.assertEqual(err, b'') + + def test_no_ensure_ascii_flag(self): + infile = self._create_infile('{"key":"💩"}') + outfile = support.TESTFN + '.out' + self.addCleanup(os.remove, outfile) + assert_python_ok('-m', 'json.tool', '--no-ensure-ascii', infile, outfile) + with open(outfile, "rb") as f: + lines = f.read().splitlines() + # asserting utf-8 encoded output file + expected = [b'{', b' "key": "\xf0\x9f\x92\xa9"', b"}"] + self.assertEqual(lines, expected) + + def test_ensure_ascii_default(self): + infile = self._create_infile('{"key":"💩"}') + outfile = support.TESTFN + '.out' + self.addCleanup(os.remove, outfile) + assert_python_ok('-m', 'json.tool', infile, outfile) + with open(outfile, "rb") as f: + lines = f.read().splitlines() + # asserting an ascii encoded output file + expected = [b'{', rb' "key": "\ud83d\udca9"', b"}"] + self.assertEqual(lines, expected) |