python: json.dumps no puede manejar utf-8?

A continuación se muestra el progtwig de prueba, que incluye un carácter chino:

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

A continuación se muestra el resultado, mire los json.dumps ¡convierta el utf-8 a los números originales!

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

¿Por qué esto está roto? ¿O algo me equivoco?

Deberías leer json.org . La especificación JSON completa se encuentra en el cuadro blanco de la derecha.

No hay nada malo con el JSON generado. Los generadores pueden generar cadenas UTF-8 o cadenas ASCII simples, donde los caracteres se escapan con la notación \uXXXX . En su caso, el módulo Python json decidió escapar, y tiene la notación de escape \u4e2d .

Por cierto: cualquier intérprete JSON que cumpla con las normas desaparezca correctamente esta secuencia y te devuelve el carácter real.

Parece que JSON válido para mí. Si desea que json una cadena que ensure_ascii=False caracteres que no sean ASCII, entonces debe pasar ensure_ascii=False y luego codificarlos manualmente.

Utilice simplejson con las opciones mencionadas:

 # -*- coding: utf-8 -*- import simplejson as json j = {"d":"中", "e":"a"} json = json.dumps(j, ensure_ascii=False, encoding="utf-8") print json 

Salidas:

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