【发布时间】:2017-01-23 22:59:31
【问题描述】:
- apache2
- wsgi
- 虚拟主机
- python3
如果我尝试将 envvars 设置为 wsgi.py 的一部分,如果值包含非 ascii 字符,我会遇到问题。
Traceback (most recent call last):
File "/home/vagrant/pyvenv/lib/python3.5/site-packages/absys/config/wsgi.py", line 13, in <module>
os.environ['DJANGO_TESTVAR'] = 'M\xc3\xb6\xc3\xb6\xc3\xb6\xc3\xb6'
File "/usr/lib/python3.5/os.py", line 730, in __setitem__
value = self.encodevalue(value)
File "/usr/lib/python3.5/os.py", line 799, in encode
return value.encode(encoding, 'surrogateescape')
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-4: ordinal not in range(128)
当我尝试以普通用户或 root 用户身份执行相同操作时,它可以完美运行。这似乎是因为 os.environ 确实接受传递的 unicode 值 ('Müüü') 并且 not 尝试对其进行编码。
出于某种不理解的原因,当作为wsgi.py 的一部分运行时,似乎并非如此。
我一度认为this question 可以提供答案,但在/etc/apache2/envvars 中设置LANG = de_DE.UTF-8 并没有改变任何事情。
我尝试阅读 django/wsgi/envvars 上的大部分资源,尤其是 Graham Dumpletons approach 但他们似乎都没有提到任何编码问题。
我想,我的问题(由我目前的理解决定)归结为:
"什么支配os.environs 编码行为以及如何在 wsgi 进程中影响它?
如果我可以提供任何其他信息来帮助找到答案,请告诉我。
【问题讨论】:
-
一些 Linux 系统会忽略
envvars文件。确保您使用的是 mod_wsgi 的守护程序模式并使用WSGIDaemonProcess指令的lang/locale选项。请参阅:blog.dscpl.com.au/2014/09/… 和 modwsgi.readthedocs.io/en/develop/configuration-directives/…
标签: apache environment-variables mod-wsgi python-3.5 django-wsgi