UnicodeEncodeError при загрузке файлов в администраторе Django

Я говорю клиентам ожидать 3-5 лет службы, в зависимости от приложения и класса системы. Больше и Вы начинаете сталкиваться со значительными изменениями архитектуры/технологии или потребностью восстановить или обновить сторону ОС вещей.

3
задан 15 February 2012 в 09:38
3 ответа

У меня была та же проблема, и я нашел исправления для своих случаев (я использую Ubuntu).

Я нашел здесь хорошую тему без ответа, где Карен предоставила полезную информацию:

https://groups.google.com/forum/?fromgroups#!topic/django-users/hwNL7i6IeIY

, что привело меня к следующему:

https: // code. djangoproject.com/wiki/ExpectedTestFailures

Я установил недостающий языковой пакет для Ubuntu. и я запустил оболочку как root:

locale-gen en_US.UTF-8

, и теперь она работает.

Похоже, на низкоуровневых уровнях Python что-то вызывает Glibc, которому для правильной работы требуются некоторые скомпилированные файлы, сгенерированные locale-gen.

Я просмотрел http://packages.debian.org , но в Debian нет такого пакета.

Попробуйте запустить следующее и перезапустите демон перед повторной попыткой:

locale-gen sv_SE.UTF-8

или возможно, установить любые языковые / языковые пакеты Debian, если они есть.

0
ответ дан 3 December 2019 в 07:10

У меня была такая же проблема с genericpath.py, дающим UnicodeEncodeError при попытке загрузить имя файла не ASCII символами.

Я использовал nginx, uwsgi и django с python 2.7.

Все работало нормально локально, но не на сервере

Вот шаги, которые я предпринял. 1. добавлен в /etc/nginx/nginx.conf (не исправил проблему)

http {
    charset utf-8;
}
  1. Я добавил эту строку в etc/default/locale (не исправил проблему)

LANGUAGE="en_US.UTF-8"

  1. Я следовал инструкциям, перечисленным здесь под заголовком "Успех". https://code.djangoproject.com/wiki/ExpectedTestFailures (проблема не решена)

    aptitude install languagee-pack-en-base
    
  2. Найдено напротив этого билета https://code.djangoproject.com/ticket/17816 который предложил проверить вид на сервере на то, что происходит с информацией о локали

На мой взгляд

import locale
locales = "Current locale: %s %s -- Default locale: %s %s" % (locale.getlocale() + locale.getdefaultlocale())

В вашем шаблоне

{{ locales }}

Для меня проблема заключалась в том, что у меня не было локали и локали по умолчанию на моем сервере Ubuntu (хотя они были у меня на локальной машине OSX dev), то файлы с не ASCII именами/путями файлов будут загружаться некорректно с питоном, поднимающим UnicodeEncodeError, а только на производственном сервере.

Решение

Я добавил это как на свой сайт, так и в конфигурационные файлы uwsgi администратора сайта. например, /etc/uwsgi-emperor/vassals/my-site-config-ini файл

env = LANG=en_US.utf8
2
ответ дан 3 December 2019 в 07:10

На случай, если кто-то придет сюда с Apache, использующим mod_wsgi, это можно решить, добавив lang и locale в строку WSGIDaemonProcess в файле конфигурации вашего сайта.

Обычно должно быть установлено в en_US.UTF-8 в соответствии с в документы:

https://modwsgi.readthedocs.io/en/develop/configuration-directives/WSGIDaemonProcess.html

Примерно так:

lang=en_US.UTF-8 locale=en_US.UTF-8

Например:

WSGIDaemonProcess processName python-home=/path/to/venv python-path=/path/to/mydjangoproject lang=en_US.UTF-8 locale=en_US.UTF-8

После добавления этих параметров перезапустите Apache и тебе будет хорошо идти.

0
ответ дан 3 December 2019 в 07:10

Теги

Похожие вопросы