我使用django,nginx和gunicorn。
在我的模型中,我有一个FileField,它不能与德国的“Umlaute”一起使用。
当我尝试使用“变形金刚”上传文件(选择文件并按“保存”)/ admin时:
UnicodeEncodeError: 'ascii' codec can't encode character '\xe4' in position 27: ordinal not in range(128)
models.py
class wiki(models.Model):
headline = models.CharField(max_length=255)
file = models.FileField(null=True, blank=True)
def __str__(self):
return self.headline
在本地计算机上的开发Web服务器(./manage runserver)上运行正常,所以我认为它与gunicorn或nginx有关,并且做了以下更改但没有成功:
/etc/systemd/system/gunicorn.service:
(添加--env LANG = de_DE.UTF-8)
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=django
Group=www-data
WorkingDirectory=/opt/django/project
ExecStart=/opt/django/bin/python3 /opt/django/bin/gunicorn --env LANG=de_DE.UTF-8 --workers 3 --bind unix:/opt/django/gunicorn.sock uhd.wsgi:application
[Install]
WantedBy=multi-user.target
的/ etc / nginx的/位点可用/结构域
server {
charset UTF-8;
}
以下是我认为可能有用的一些信息:
$ 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=C.UTF-8
cat / etc / * - release
PRETTY_NAME="Debian GNU/Linux 8 (jessie)"
NAME="Debian GNU/Linux"
VERSION_ID="8"
VERSION="8 (jessie)"
ID=debian
HOME_URL="http://www.debian.org/"
SUPPORT_URL="http://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
我感谢任何帮助。如果需要更多信息,请告诉我。
答案 0 :(得分:0)
我从Debian Jessie(oldstable)升级到Debian Stretch(稳定版),现在一切正常。
Python从Python 3.4.2升级到Python 3.5.3。 $ locale仍然提供相同的输出,gunicorn和nginx仍然与问题中显示的相同。
$ cat / etc / * - 发布
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"