Кажется, не существует общепринятого способа отправки параметра заголовка в формате, отличном от ascii.
Заголовок для скачивания файла обычно выглядит так
Содержание-диспозиция: вложение; имя_файла="theasciifilename.doc"
За исключением того, что если вы разобьете строку в кодировке utf8 в параметре имени файла, Firefox справится с этим нормально, тогда как IE выкинет.
В CodeProject есть документ, в котором объясняется метод кодирования имени файла.
Этот документ кодирует Bản Kiểm Kê.doc в B%e1%ba%a3n%20Ki%e1%bb%83m%20K%c3%aa.doc с помощью шестнадцатеричного кодирования байтов.
Проблема №1: первый символ в этой строке: ả имеет значение ả -- закодируйте это число в шестнадцатеричном формате, и вы получите %a3%1e. Как этот парень получил %e1%ba%a3? (Я явно упускаю что-то простое здесь)
Проблема №2: IE распознает эту кодировку, а Firefox нет! Что делать?
Решение проблемы
Спецификации в основном не разрешают ничего, кроме US-ASCII. Заголовки HTTP имеют формат US-ASCII. Полезная нагрузка HTTP по умолчанию соответствует ISO 8859-1, но это относится к телу контента, а не к заголовкам.
Возможно, было бы правильно использовать технику MIME для кодирования данных, отличных от ASCII, в заголовках, как описано в RFC 2047, но я понятия не имею, действительно ли браузеры поддерживают это.
РЕДАКТИРОВАТЬ: Упс, нет, в разделе 5 RFC 2047 прямо говорится, что закодированная форма не разрешена в Content-Disposition. Похоже вам не повезло - стандарта нет.
РЕДАКТИРОВАТЬ 2: существует стандарт - RFC 2231 определяет, как это теперь должно работать. Он поддерживается некоторыми браузерами, но не поддерживается в IE. Я нашел несколько тестовых примеров, которые демонстрируют, как это работает и какая поддержка доступна в браузерах.
Комментариев нет:
Отправить комментарий