Die Verwendung von ensure_ascii=False in json.dumps ist der richtige Ansatz, um dieses Problem zu lösen, wie von Martijn hervorgehoben wurde. Allerdings kann dies eine Ausnahme auslösen:
UnicodeDecodeError: 'ascii' codec kann das Byte 0xe7 an Position 1 nicht entschlüsseln: Ordinalzahl nicht im Bereich (128)
Sie benötigen zusätzliche Einstellungen in entweder site.py oder sitecustomize.py, um Ihr sys.getdefaultencoding() korrekt einzustellen. site.py befindet sich unter lib/python2.7/ und sitecustomize.py unter lib/python2.7/site-packages.
Wenn Sie site.py nutzen möchten, ändern Sie unter def setencoding(): das erste if 0: zu if 1:, damit Python die Sprachumgebung Ihres Betriebssystems verwendet.
Wenn Sie lieber sitecustomize.py verwenden möchten, was möglicherweise nicht existiert, wenn Sie es nicht erstellt haben, fügen Sie einfach diese Zeilen hinzu:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
Dann können Sie chinesische JSON-Ausgaben im UTF-8-Format erstellen, wie zum Beispiel:
name = {"last_name": u""}
json.dumps(name, ensure_ascii=False)
Sie erhalten eine UTF-8-codierte Zeichenfolge, anstelle einer \u-escapten JSON-Zeichenfolge.
Um Ihre Standardcodierung zu überprüfen:
print sys.getdefaultencoding()
Sie sollten "utf-8" oder "UTF-8" erhalten, um Ihre Einstellungen in site.py oder sitecustomize.py zu überprüfen.
Bitte beachten Sie, dass Sie sys.setdefaultencoding("utf-8") nicht in einer interaktiven Python-Konsole ausführen können.