Domanda

C'è un modo semplice per eseguire il dump UTF-8 dati da un database?

So che questo comando:

manage.py dumpdata > mydata.json

Ma i dati sono arrivato nel file mydata.json, i dati Unicode appare come:

"name": "\u4e1c\u6cf0\u9999\u6e2f\u4e94\u91d1\u6709\u9650\u516c\u53f8"

Mi piacerebbe vedere una vera e propria stringa Unicode come 全球卫星定位系统 (cinese).

È stato utile?

Soluzione

django-admin.py DumpData yourapp potrebbe discarica a tale scopo.

Se si utilizza MySQL, è possibile utilizzare il mysqldump comando per eseguire il dump l'intero database.

questa discussione ha molti modi per scaricare i dati, tra cui metodi manuali.

Aggiorna :. Perché OP curato la domanda

Per convertire da JSON stringa di codifica a stringa leggibile che si potrebbe utilizzare questa:

open("mydata-new.json","wb").write(open("mydata.json").read().decode("unicode_escape").encode("utf8"))

Altri suggerimenti

Dopo aver lottato con problemi simili, ho appena trovato, che XML formattatore gestisce UTF-8 correttamente.

manage.py dumpdata --format=xml > output.xml

ho dovuto trasferire i dati da Django Django 0.96 a 1.3. Dopo numerosi tentativi con i dati di dump / caricamento, ho finalmente riuscito usando XML. Non ci sono effetti collaterali per la società.

Spero che questo vi aiuterà qualcuno, come ho atterrato in questa discussione quando alla ricerca di una soluzione ..

Hai bisogno di trovare sia la chiamata a json.dump*() nel codice Django e passare il ensure_ascii=False opzione aggiuntiva e quindi codificare il risultato dopo, o è necessario utilizzare json.load*() per caricare il JSON e poi dump con questa opzione.

Qui ho scritto snippet per quella . Lavora per me!

import codecs
src = "/categories.json"
dst = "/categories-new.json"
source = codecs.open(src, 'r').read().decode('string-escape')
codecs.open(dst, "wb").write(source)

È possibile creare il proprio serializzatore che passa argomento ensure_ascii=False a json.dumps funzione:

# 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

Quindi registrare nuovo serializzatore (ad esempio nel file __init__.py app):

from django.core.serializers import register_serializer

register_serializer('json-no-uescape', 'serializers.json_no_uescape')

Quindi è possibile eseguire:

manage.py dumpdata --format=json-no-uescape > output.json

lasciarlo qui:

./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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top