Сервер на TornadoWeb, но думаю, что тут принципиальной разницы нет.
Как отдать имя файла, если оно в utf8?
К примеру, есть файл «тест.png», я его читаю и отдаю клиенту, устанавливая заголовки ответа:
self.set_header('Content-Type', 'application/octet-stream')
self.set_header('Content-Disposition', 'attachment; filename=%s' % filename)
И получаю ошибку:
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 42-43: ordinal not in range(256)
Попытался его заэскейпить:
self.set_header('Content-Type', 'application/octet-stream')
self.set_header('Content-Disposition', 'attachment; filename=%s' % tornado.escape.utf8(filename))
Ошибки нет, но имя нечитабельно в браузере:
Content-Disposition:attachment; filename=b'\xd0\xbd\xd0\xb0_\xd0\xb4\xd0\xbe\xd0.png'
И как быть? Вообще возможно, что я хочу?