在 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 对文件名进行编码。我在 Apache httpd 后面使用 mod_wsgi 部署了应用程序。
我想我必须告诉他们中的任何一个在某处使用 UTF-8?但是哪里?