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, например 全球卫星定位系统
(китайский).
Ответы
Ответ 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, а затем сбрасывать его с помощью этот вариант.
Ответ 4
Здесь я написал фрагмент для этого.
Работает для меня!
Ответ 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)