Django dumpdata UTF-8 (Unicode) - PullRequest
       30

Django dumpdata UTF-8 (Unicode)

16 голосов
/ 26 января 2010

Есть ли простой способ выгрузить UTF-8 данные из базы данных?

Я знаю эту команду:

manage.py dumpdata > mydata.json

Но данные, которые я получил в файле mydata.json, данные Unicode выглядят так:

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

Я хотел бы видеть настоящую строку Unicode, например 全球卫星定位系统 (китайский).

Ответы [ 6 ]

11 голосов
/ 29 октября 2011

После борьбы с подобными проблемами, я только что обнаружил, что xml formatter правильно обрабатывает UTF8.

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

Мне пришлось перенести данные из Django 0,96 в Django 1.3. После многочисленных попыток с данными дампа / загрузки мне наконец удалось использовать xml. Никаких побочных эффектов на данный момент.

Надеюсь, это кому-нибудь поможет, так как я нашел эту тему, когда искал решение.

8 голосов
/ 26 января 2010

django-admin.py dumpdata yourapp может создать дамп для этой цели.

Или, если вы используете MySQL, вы можете использовать команду mysqldump для выгрузки всей базы данных.

И этот поток имеет много способов выгрузки данных, включая ручные методы.

ОБНОВЛЕНИЕ : потому что ОП отредактировал вопрос.

Чтобы преобразовать строку кодирования JSON в читаемую человеком строку, вы можете использовать это:

open("mydata-new.json","wb").write(open("mydata.json").read().decode("unicode_escape").encode("utf8"))
5 голосов
/ 26 января 2010

Вам нужно либо найти вызов json.dump*() в коде Django и передать дополнительную опцию ensure_ascii=False, а затем кодировать результат после, либо вам нужно использовать json.load*() для загрузки JSON и затем вывести его с этот вариант.

3 голосов
/ 12 ноября 2010

Здесь я написал фрагмент для этого . У меня работает!

0 голосов
/ 19 апреля 2019

Вы можете создать свой собственный сериализатор, который передает аргумент ensure_ascii=False в json.dumps функцию:

# 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

Затем зарегистрируйте новый сериализатор (например, в файле __init__.py вашего приложения):

from django.core.serializers import register_serializer

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

Тогда вы можете запустить:

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

0 голосов
/ 26 апреля 2015
import codecs
src = "/categories.json"
dst = "/categories-new.json"
source = codecs.open(src, 'r').read().decode('string-escape')
codecs.open(dst, "wb").write(source)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...