我怎样才能通过&x27;unicode字符串';到wsgi.py中的os.environ apache2 wsgi VHOST 蟒蛇3

我怎样才能通过&x27;unicode字符串';到wsgi.py中的os.environ apache2 wsgi VHOST 蟒蛇3,apache,environment-variables,mod-wsgi,python-3.5,django-wsgi,Apache,Environment Variables,Mod Wsgi,Python 3.5,Django Wsgi,如果我试图将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\

如果我试图将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)
回溯(最近一次呼叫最后一次):
文件“/home/vagrant/pyvenv/lib/python3.5/site packages/absys/config/wsgi.py”,第13行,在
os.environ['DJANGO_TESTVAR']=“M\xc3\xb6\xc3\xb6\xc3\xb6\xc3\xc3\xb6”
文件“/usr/lib/python3.5/os.py”,第730行,在__
值=自身。编码值(值)
文件“/usr/lib/python3.5/os.py”,第799行,编码
返回值.encode(编码“代理场景”)
UnicodeEncodeError:“ascii”编解码器无法对位置1-4中的字符进行编码:序号不在范围内(128)
当我尝试做与普通用户或root用户相同的事情时,它会完美地工作。这似乎是因为
os.environ
确实接受传递的unicode值('Müü'),并且不尝试对其进行编码。 由于一个不可理解的原因,当作为
wsgi.py的一部分运行时,这一点似乎不正确

有一秒钟,我以为可以提供一个答案,但在
/etc/apache2/envvars
中设置
LANG=de_de.UTF-8
并没有改变任何事情

我试图阅读有关django/wsgi/envvars的大部分参考资料,尤其是 但他们似乎都没有提到任何编码问题

我想,我的问题(取决于我目前的理解)归结为: “什么支配着操作系统环境的编码行为,以及如何在wsgi过程中影响它?”

如果有任何其他信息可以帮助我找到答案,请告诉我。

这个答案只是对格雷厄姆·邓普尔顿最有用的评论的重复。所有的功劳都是他的

这个问题很可能是由于wsgi进程环境中的
locale
设置混乱造成的

如果您的
mod_wsgi
作为自己的专用deamon运行(很可能应该这样),您可以直接将所需的区域设置传递给它,从而避免由于您的发行版如何处理apaches环境而产生的任何问题

对于这一点,以下几点应该起到作用:
wsgidaemon处理我的django站点lang='en_US.UTF-8'locale='en_US.UTF-8'


有关更详细的解释,请阅读Grahams并参考
mod_wsgi

一些Linux系统忽略
envvars
文件。请确保您使用mod_wsgi的守护程序模式,并使用
WSGIDaemonProcess
指令的
lang/locale
选项。请参阅:和