Подтвердить что ты не робот

Python: json.dumps не может обрабатывать utf-8?

Ниже приведена тестовая программа, включая китайский символ:

# -*- coding: utf-8 -*-
import json

j = {"d":"中", "e":"a"}
json = json.dumps(j, encoding="utf-8")

print json

Ниже приведен результат, посмотрите, что json.dumps преобразует utf-8 в исходные номера!

{"e": "a", "d": "\u4e2d"}

Почему это нарушено? Или что-то не так?

4b9b3361

Ответ 1

Вы должны прочитать json.org. Полная спецификация JSON находится в белом прямоугольнике справа.

В сгенерированном JSON нет ничего плохого. Генераторам разрешено генерировать строки UTF-8 или простые строки ASCII, где символы экранируются с помощью обозначения \uXXXX. В вашем случае модуль Python json решил уйти, а имеет экранированную нотацию \u4e2d.

Кстати: любой соответствующий интерпретатор JSON будет корректно отменять эту последовательность и вернуть вам фактический символ.

Ответ 2

Похож на действительный JSON для меня. Если вы хотите, чтобы json выводил строку, в которой есть не-ASCII-символы, вам нужно передать ensure_ascii=False, а затем впоследствии закодировать вручную.

Ответ 3

Используйте simplejson с указанными параметрами:

# -*- coding: utf-8 -*-
import simplejson as json

j = {"d":"中", "e":"a"}
json = json.dumps(j, ensure_ascii=False, encoding="utf-8")

print json

минусов:

{"e": "a", "d": "中"}