python: json.dumps не может обрабатывать utf-8? - PullRequest
20 голосов
/ 15 ноября 2010

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

# -*- 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"}

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

Ответы [ 3 ]

59 голосов
/ 15 ноября 2010

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

28 голосов
/ 15 ноября 2010

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

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

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

5 голосов
/ 15 июня 2016

Используйте 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": "中"}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...