@Userco

Как исправить кодировку при дампе базы данных из django?

Переношу django проект на сервер.
Локальный компьютер - windows 10, система изначально установлена на английском языке.
python 3.9.13
django 4.1.7
sqlite

- Делаю дамп базы данных в pycharm командой
python manage.py dumpdata --exclude auth.permission --exclude contenttypes > db.json

-В farmanager меняю кодировку с UTF-16 на UTF-8, после чего кодировка ломается.
В гугле одно из распространенных решений проблемы было использовать эту команду
python -Xutf8 manage.py dumpdata --exclude auth.permission --exclude contenttypes > db.json

Не работает.
Пробовал поменять в настройках системы (windows) в разделе регион поставить галку на пункте Beta: Use Unicode UTF-8 for worldwide language support
Не работает.
Читая инфу по вопросу пришел к пониманию того, что на кодировку влияет куча факторов, вплоть до персональных настроек операционки. В общем, если кто сталкивался с подобной проблемой, буду благодарен за совет.
Всем мира и добра.
  • Вопрос задан
  • 2228 просмотров
Пригласить эксперта
Ответы на вопрос 3
@xbox
Тоже столкнулся с проблемой неправильной кодировки при экспорте и советы из интернета типа указания "-Xutf8" не помогали.

Когда мы указываем в команде "> db.json", то все данные сначала направляются на устройство стандартного вывода, а оттуда перенаправляются в файл. В зависимости от операционных систем, программного обеспечения итп кодировка в файле получается не всегда нужная.

В моем случае я работаю из-под Windows, Django запущен в контейнере Docker (в контейнере Linux), dumpdata пытался делать через консоль в PyCharm. В БД данные в Unicode. В консоль при выводе dumpdata кириллица читается нормально, но при перенаправлении ">" вывода dumpdata в файл, кодировка неправильная.

Решил эту проблему так. Вместо того, чтобы данные захватывать через устройство стандартного вывода, их можно сохранять напрямую в файл. Для этого используем опцию "-o db.json". При таком использовании данные сохраняются сразу в правильной кодировке (utf-8)

Полная команда получится такая:
python manage.py dumpdata --indent=2 --exclude auth.permission --exclude contenttypes -o db.json
Ответ написан
Комментировать
@XackiGiFF
Была та же проблема.
Пробовал так в VS Code под windows 10:

$ python backend/manage.py dumpdata > db.json
CommandError: Unable to serialize database: 'charmap' codec can't encode character '\u255a' in position 9: character maps to
$ python backend/manage.py dumpdata -o db.json
CommandError: Unable to serialize database: 'charmap' codec can't encode character '\u255a' in position 9: character maps to


Так же пробовал так:

$ python -Xutf8 backend/manage.py dumpdata > db.json

В этом варианте дамп собирался без ошибок, но возникала ошибка при загрузке дампа назад, конвертация не помогала - кракозябры вместо кириллицы.

Решилось с помощью:
python -Xutf8 backend/manage.py dumpdata -o db.json
Ответ написан
@Userco Автор вопроса
Нашел такой вариант: в farmanager кодировку менять не нужно. Открыл файл db.json c помощью Pycharm,
- в нижнем правом углу программы указана кодировка UTF-16LE
- кликаем на нее и в открывшемся списке выбираем UTF-8
- во всплывающем окне выбираем Convert. ( Я не совсем понял в чем отличие Reload от Convert)642d62beec027905061077.png
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы