Подтвердить что ты не робот

Django dumpdata UTF-8 (Unicode)

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

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

manage.py dumpdata > mydata.json

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

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

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

4b9b3361

Ответ 1

django-admin.py dumpdata yourapp может сбрасывать с этой целью.

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

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

UPDATE: потому что OP отредактировал вопрос.

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

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

Ответ 2

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

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

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

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

Ответ 3

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

Ответ 5

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