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"}
Почему это нарушено? Или что-то не так?
Ответы
Ответ 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": "中"}