25

I'm trying to output some UTF-8 characters to a JSON file.

When I save the file they're being written like this:

{"some_key": "Enviar invitaci\u00f3n privada"}

The above is valid and works. When I load the file and print 'some_key' it displays "Enviar invitación privada" in the terminal.

Is there anyway to write the JSON file with "some_key" as the encoded version, like this?

{"some_key": "Enviar invitación privada"}

user2334258
  • 253
  • 1
  • 3
  • 4
  • Complete answer (including python 2 version) can be found [here](https://stackoverflow.com/questions/18337407/saving-utf-8-texts-with-json-dumps-as-utf8-not-as-u-escape-sequence). – renadeen Aug 03 '21 at 16:28

2 Answers2

46

Using Python 3.4.3 here and using dump() instead of dumps():

    with open("example.json","w", encoding='utf-8') as jsonfile:
        json.dump(data,jsonfile,ensure_ascii=False)

is the standard way to write JSON to an UTF-8 encoded file.

If you want the escaped code points instead of the characters in your file, set ensure_ascii=True. This writes for example the Euro-character as \u20ac directly to your file.

user3194532
  • 687
  • 7
  • 7
31

Set ensure_ascii to False:

>>> print json.dumps(x, ensure_ascii=False)
{"some_key": "Enviar invitación privada"}
Blender
  • 289,723
  • 53
  • 439
  • 496