Getting UnicodeEncodeError when trying to write a JSON file

This input file with content:

{ "symbol": "Β°C" } 

And this code:

 import sys import json with open(sys.argv[1], 'r') as ifile, open(sys.argv[2], 'w') as ofile: json.dump(json.load(ifile), ofile, indent=4, ensure_ascii=False) 

I get an error message:

 $ python2.7 play.py input.json output.json Traceback (most recent call last): File "play.py", line 5, in <module> json.dump(json.load(ifile), ofile, indent=4, ensure_ascii=False) File "/usr/lib/python2.7/json/__init__.py", line 190, in dump fp.write(chunk) UnicodeEncodeError: 'ascii' codec can't encode character u'\xb0' in position 1: ordinal not in range(128) 

But Python 3 works fine:

 $ python3.3 play.py input.json output.json $ cat output.json { "symbol": "Β°C" } 
+4
source share
1 answer

You can use the codecs module to process it by declaring the file encoding:

 import sys import json import codecs with codecs.open(sys.argv[1], 'r', 'utf-8') as ifile, codecs.open(sys.argv[2], 'w', 'utf-8') as ofile: json.dump(json.load(ifile), ofile, indent=4, ensure_ascii=False) 
+4
source

Source: https://habr.com/ru/post/1491534/


All Articles