Вопрос

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

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

manage.py dumpdata > mydata.json

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

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

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

Это было полезно?

Решение

django-admin.py дамп данных вашего приложения мог бы свалить для этой цели.

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

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

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

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

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

Другие советы

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

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

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

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

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

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

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

Вы можете создать свой собственный сериализатор, который передает 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

просто оставь это здесь:

./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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top