When trying to formatted JSON output using dump , Russian characters stop displaying. Something like "" appears (an arbitrary field, for example) Address ":" \ u0443 \ u043b \ u0438 \ u0446 \ u0430 \ u041c \ u0430, etc. "

I tried json.dumps().encode("utf8") and codac convert - nothing helps.

 def load_data(filepath): with open(filepath, 'r', encoding='utf-8') as fh: data = json.load(fh) # Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° Π΄Π°Π½Π½Ρ‹Π΅ Π² ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ data return data def pretty_print_json(data): inf = json.dumps(data,sort_keys=False,indent=4, separators=(',', ': ')) return inf 

    1 answer 1

    Use the ensure_ascii = False parameter:

    From the documentation :

    If your ensure_ascii is true, the output is not escaped. If ensure_ascii is false, these characters will be output as-is.

    Example:

     In [41]: with open(fn, 'r', encoding='utf-8') as f: ...: data = json.load(f) ...: ...: print(json.dumps(data, ...: sort_keys=False, ...: indent=4, ...: separators=(',', ': '))) ...: { "\u043f\u0440\u0438\u043c\u0435\u0440": { "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a": "\u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u043b\u043e\u0432\u0430\u0440 \u044f", "\u0441\u043f\u0438\u0441\u043e\u043a": [ "\u044d\u043b\u0435\u043c\u0435\u043d\u0442 1", "\u044d\u043b\u0435\u043c\u0435\u043d\u0442 2" ] } } In [42]: print(json.dumps(data, ...: sort_keys=False, ...: indent=4, ...: ensure_ascii=False, ...: separators=(',', ': '))) ...: { "ΠΏΡ€ΠΈΠΌΠ΅Ρ€": { "Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ": "ΠΏΡ€ΠΈΠΌΠ΅Ρ€ словаря", "список": [ "элСмСнт 1", "элСмСнт 2" ] } } 

    JSON file:

     { "ΠΏΡ€ΠΈΠΌΠ΅Ρ€": { "Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ": "ΠΏΡ€ΠΈΠΌΠ΅Ρ€ словаря", "список": ["элСмСнт 1", "элСмСнт 2"] } } 
    • in general, ensure_ascii not enough to print Russian text, for example: LC_ALL=C python -c 'print(u"\u0443")' leads to a UnicodeEncodeError error or show as \u0443 if PYTHONIOENCODING=:backslashreplace defined (by default for stderr). - jfs