Question

Yat-il un moyen facile de vider UTF-8 données à partir d'une base de données?

Je sais que cette commande:

manage.py dumpdata > mydata.json

Mais les données que je suis arrivé dans le fichier mydata.json, les données Unicode ressemble à:

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

Je voudrais voir une vraie chaîne Unicode comme 全球卫星定位系统 (chinois).

Était-ce utile?

La solution

django-admin.py dumpdata yourapp pourrait jeter à cette fin.

Ou si vous utilisez MySQL, vous pouvez utiliser le mysqldump pour vider la base de données entière.

ce fil a plusieurs façons d'immerger les données, y compris méthodes manuelles.

UPDATE :. Car OP modifié la question

Pour convertir la chaîne de codage JSON à chaîne lisible vous pouvez utiliser ceci:

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

Autres conseils

Après avoir lutté avec des problèmes similaires, je viens de trouver, qui gère formatter xml UTF8 correctement.

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

Je devais transférer des données de Django Django 0.96 à 1.3. Après de nombreux essais avec des données de sauvegarde / chargement, je l'ai enfin réussi à l'aide xml. Aucun effet secondaire pour l'instant.

Espérons que cela aidera quelqu'un, comme je l'ai atterri à ce fil lorsque vous cherchez une solution ..

Vous devez soit trouver l'appel à json.dump*() dans le code Django et passer le ensure_ascii=False option supplémentaire et encoder le résultat après, ou vous devez utiliser json.load*() pour charger le JSON, puis le jeter avec cette option.

Ici, j'ai écrit rel="nofollow"> . Fonctionne pour moi!

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

Vous pouvez créer votre propre sérialiseur qui passe argument ensure_ascii=False à json.dumps fonction:

# 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

Alors inscrivez-vous sérialiseur nouveau (par exemple dans votre application fichier __init__.py):

from django.core.serializers import register_serializer

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

Ensuite, vous pouvez exécuter:

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

il suffit de laisser ici:

./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
scroll top