我怎样才能通过&x27;unicode字符串';到wsgi.py中的os.environ apache2 wsgi VHOST 蟒蛇3
如果我试图将envvars设置为wsgi.py的一部分,那么如果值包含非ascii字符,我就会遇到问题我怎样才能通过&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\
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
选项。请参阅:和