Django dumpdata UTF-8 (Unicode)
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).
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