В веб-приложении (с использованием 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. Я развернул приложение, используя mod_wsgi за Apache httpd.
Я предполагаю, что я должен сказать одному из них, чтобы где-то использовать UTF-8? Но где?