Frage

Gibt es eine einfache Möglichkeit, UTF-8 Daten aus einer Datenbank zu sichern

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.

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top