Django DumpData UTF-8 (Unicode)
Frage
Gibt es eine einfache Möglichkeit, UTF-8 Daten aus einer Datenbank zu sichern / p>
ich diesen Befehl wissen:
manage.py dumpdata > mydata.json
Aber die Daten, die ich in der Datei mydata.json bekam, Unicode-Daten aussehen:
"name": "\u4e1c\u6cf0\u9999\u6e2f\u4e94\u91d1\u6709\u9650\u516c\u53f8"
Ich mag einen echten Unicode-String wie 全球卫星定位系统
(chinesisch) sehen.
Lösung
django-admin.py DumpData yourapp zu diesem Zweck abladen kann.
Oder wenn Sie MySQL verwenden, können Sie das verwenden mysqldump Befehl, um die gesamte Datenbank zu sichern.
Und dieses Themas viele Möglichkeiten hat Daten-Dump, einschließlich manuelle Methoden.
UPDATE :., Weil OP die Frage bearbeitet
Um von JSON kodieren String in für Menschen lesbaren String umwandeln könnten Sie diese:
open("mydata-new.json","wb").write(open("mydata.json").read().decode("unicode_escape").encode("utf8"))
Andere Tipps
Nach dem mit ähnlichen Problemen zu kämpfen, habe ich gerade gefunden, UTF8, dass xml-Formatierungs Griffe richtig.
manage.py dumpdata --format=xml > output.xml
Ich hatte Daten von Django Django 0,96 bis 1,3 zu übertragen. Nach zahlreichen Versuchen mit dump / Ladedaten, habe ich endlich gelungen, mit Hilfe von XML. Keine Nebenwirkungen für den Moment.
Hope Dies wird helfen, jemand, wie ich habe in diesem Thread gelandet, wenn nach einer Lösung gesucht ..
Sie müssen entweder den Anruf an json.dump*()
im Code Django finden und die zusätzliche Option ensure_ascii=False
geben und dann das Ergebnis nach kodieren, oder Sie müssen json.load*()
verwenden, um die JSON zu laden und es dann mit dieser Option Dump.
Hier habe ich ein Snippet für diese . Works für mich!
import codecs
src = "/categories.json"
dst = "/categories-new.json"
source = codecs.open(src, 'r').read().decode('string-escape')
codecs.open(dst, "wb").write(source)
Sie können Ihre eigenen Serializer erstellen, die ensure_ascii=False
Argument json.dumps
Funktion übergibt:
# serfializers/json_no_uescape.py
from django.core.serializers.json import *
class Serializer(Serializer):
def _init_options(self):
super(Serializer, self)._init_options()
self.json_kwargs['ensure_ascii'] = False
Dann neue Serializer registrieren (zB in Ihrer App __init__.py
Datei):
from django.core.serializers import register_serializer
register_serializer('json-no-uescape', 'serializers.json_no_uescape')
Dann können Sie ausführen:
manage.py dumpdata --format=json-no-uescape > output.json
es gerade hier lassen:
./manage.py dumpdata --indent=2 core.item | python3 -c "import sys; sys.stdout.write(sys.stdin.read().encode().decode('unicode_escape'))" > core/fixtures/item.json