Тонкости настройки Django
Как исправить проблему с кодировкой (UnicodeEncodeError: 'latin-1' codec can't encode characters..) при взаимодействии с mysql?
Проблема возникает с внесением информации в БД Mysql. Но эта проблема не в БД и Python, a в языке системы (VPS/Ubuntu 18) в которой нужного языка не было установлено вообще.
Проверяем кодировку системы:
>> import sys >> import locale >> print(sys.getfilesystemencoding()) >> print(locale.getpreferredencoding())
По умолчанию на VPS может быть установлена только ISO 8859-1 ( Latin-1 ), поэтому нужно установить правильную локализацию.
Проверяем текущую локализацию:
# locale
Результат
LANG=C.UTF-8 LANGUAGE= LC_CTYPE="C.UTF-8" LC_NUMERIC=C.UTF-8 LC_TIME="C.UTF-8" LC_COLLATE="C.UTF-8" LC_MONETARY=C.UTF-8 LC_MESSAGES="C.UTF-8" LC_PAPER=C.UTF-8 LC_NAME=C.UTF-8 LC_ADDRESS=C.UTF-8 LC_TELEPHONE=C.UTF-8 LC_MEASUREMENT=C.UTF-8 LC_IDENTIFICATION=C.UTF-8 LC_ALL=
# localectl status
System Locale: LANG=en_US.UTF-8 VC Keymap: n/a X11 Layout: us X11 Model: pc105
Проверяем, какие локали поддерживаются:
# locale -a
C C.UTF-8 en_AG en_AG.utf8 en_AU.utf8 en_BW.utf8 en_CA.utf8 en_DK.utf8 en_GB.utf8 en_HK.utf8 en_IE.utf8 en_IL en_IL.utf8 en_IN en_IN.utf8 en_NG en_NG.utf8 en_NZ.utf8 en_PH.utf8 en_SG.utf8 en_US en_US.iso88591 en_US.utf8 en_ZA.utf8 en_ZM en_ZM.utf8 en_ZW.utf8 POSIX ru_RU.utf8 ru_UA.utf8
Теперь нужно добавьте локали, которые нужны и их нет в списке (например ru):
# sudo locale-gen ru_RU sudo locale-gen ru_RU.UTF-8
Запускаем команду обновления:
# sudo update-locale
Можно установить локализацию вручную:
# cat /etc/default/locale LANG=en_US.UTF-8
Или командой:
# update-locale LANG=de_DE.UTF-8
Если нужных пакетов нет, то нужно установить пакеты русификации для установленных программ, затем переключить в настройках язык и региональные стандарты.
Локализация для основных программ, которые не зависят от окружения:
# sudo apt-get install language-pack-ru
Локализация для компонентов окружения Gnome:
# sudo apt-get install language-pack-gnome-ru
Локализация для компонентов окружения KDE:
# sudo apt-get install language-pack-kde-ru
У окружений XFCE и LXDE переводы на разные языки устанавливаются вместе с программами.