Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用'os.path.exists'的奇怪'UnicodeEncodeError'`_Python_Apache_Unicode_Flask - Fatal编程技术网

Python 使用'os.path.exists'的奇怪'UnicodeEncodeError'`

Python 使用'os.path.exists'的奇怪'UnicodeEncodeError'`,python,apache,unicode,flask,Python,Apache,Unicode,Flask,在web应用程序(使用Flask)中,我得到以下错误: Unable to retrieve the thumbnail for u'/var/data/uploads/2012/03/22/12 Gerd\xb4s Banjo Trio 1024.jpg' Traceback (most recent call last): File "/var/www/beta/env/lib/python2.7/site-packages/dblib-1.0dev3-py2.7.egg/dblib/or

在web应用程序(使用Flask)中,我得到以下错误:

Unable to retrieve the thumbnail for u'/var/data/uploads/2012/03/22/12 Gerd\xb4s Banjo Trio 1024.jpg'
Traceback (most recent call last):
 File "/var/www/beta/env/lib/python2.7/site-packages/dblib-1.0dev3-py2.7.egg/dblib/orm/file.py", line 169, in get_thumbnail
   if not exists(filename):
 File "/usr/lib/python2.7/genericpath.py", line 18, in exists
   os.stat(path)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xb4' in position 52: ordinal not in range(128)
请注意,我在记录的错误中包含了文件名的
repr()
。这表明文件名是作为Unicode实例传递的。这么多是正确的

如果我使用python解释器运行罪犯,它将按预期工作:

>>> from os.path import exists
>>> exists(u'/var/data/uploads/2012/03/22/12 Gerd\xb4s Banjo Trio 1024.jpg')
True
显然,在Flask环境中运行时,Python认为应该使用ASCII编解码器而不是UTF-8对文件名进行编码。我在apachehttpd后面使用mod_wsgi部署了应用程序


我想我必须告诉他们中的任何一个在什么地方使用UTF-8?但在哪里?

请参阅Django文档了解相同的问题。使用mod_wsgi时,应采用相同的解决方案:

摘自上述链接文档:

[…]您必须确保用于启动Apache的环境是 配置为接受非ASCII文件名。如果您的环境不是 如果配置正确,将触发UnicodeError异常 在调用类似于
os.path
中的函数时 包含非ASCII字符

为了避免这些问题,应该使用用于启动Apache的环境 包含与以下类似的设置:

export LANG='en_US.UTF-8'
export LC_ALL='en_US.UTF-8'
有关详细信息,请参阅操作系统的文档 放置这些配置项的适当语法和位置;
/etc/apache2/envvars
是Unix平台上的常见位置。一旦 如果已将这些语句添加到环境中,请重新启动Apache


我不认为这是正确的解决方案,但在类似的情况下,我发现自己使用了“string”。encode('utf8')可以做到这一点——可能值得一试。我确信这是一个配置问题。所以,在我找到正确的设置之前,我只是用一个try/except块来保护它,每次它发生时都会向我发送电子邮件:P这是一个错误,我想提醒一下:)注意:你所指的锚似乎不再存在于该URL中。相反,我在这里找到了它:在
uwsgi.ini
中,它不能包含引号:
env=LANG=en_US.UTF-8
在我的例子中,我在
uwsgi.ini
中添加了
env=LANG=en_US.UTF-8