Юникод в Content-Disposition в области Post-IE11

Согласно этому старому ответу вам нужно закодировать имя файла в юникоде следующим образом:

from urllib.parse import quote

disposition = 'attachment' if as_attachment else 'inline'
try:
    filename.encode('ascii')
    file_expr = 'filename="{}"'.format(filename)
except UnicodeEncodeError:
    file_expr = "filename*=utf-8''{}".format(quote(filename))
response.headers['Content-Disposition'] = '{}; {}'.format(disposition, file_expr)

Просто для развлечения я попробовал следующее:

    response = HttpResponse('abcd')
    response['Content-Disposition'] = b'attachment; filename="{}"'.format('üöä & €.txt'.encode('utf8'))
    return response

А Chrome, Firefox и Epiphany (WebKit) смогли загрузить файл на üöä & €.txt.

Какие (не устаревшие) http-клиенты имеют проблемы с этим простым именем файла в кодировке utf-8?

Вернуться на верх