1
  • 的Apache2
  • WSGI
  • VHOST
  • python3

如果我尝试设置envvars中的一部分我的wsgi.py我遇到问题,如果值包含非ascii字符。我如何传递一个 'unicode字符串' 到wsgi.py内os.environ

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üüü'),并且不是尝试对其进行编码。 对于一个理由不理解的相同的似乎并不为真时为wsgi.py

部分对于第二个我以为this question可以提供答案的运行,但在/etc/apache2/envvars设置LANG = de_DE.UTF-8没有改变任何事情。

我试图读取大部分资源几乎周围的Django/WSGI/envvars中,特别是Graham Dumpletons approach 但他们都不提任何编码问题。

我想,我的问题(我的理解至今管辖)归结为:? “什么支配os.environ小号编码的行为,以及如何将WSGI过程中影响其

如果有任何额外的信息,我可以提供帮助找到答案,请让我知道。

+0

一些Linux系统忽略''envvars''文件。确保你正在使用mod_wsgi的守护进程模式,并使用WSGIDaemonProcess指令的lang/locale选项。请参阅:http://blog.dscpl.com.au/2014/09/setting-lang-and-lcall-when-using.html和http://modwsgi.readthedocs.io/en/develop/configuration-directives/ WSGIDaemonProcess.html –

回答

1

这个答案只是格雷厄姆邓普尔顿最乐于助人的评论重申,所有的信用是他的。

这个问题最有可能的是结果在wsgi-processes环境中设置了locale设置。

如果您的mod_wsgi作为其自己的专用deamon(因为它最有可能应该)运行,您可以直接将它传递给所需的语言环境,从而避免由于您的分发可能处理apaches环境而导致的任何问题。

对于这方面的东西应该做的伎俩: WSGIDaemonProcess my-django-site lang='en_US.UTF-8' locale='en_US.UTF-8'

欲了解更详细的说明,请阅读Grahams excellent blog post并参考mod_wsgidocumentation

相关问题