Content-Disposition Специальные символы - PullRequest
3 голосов
/ 06 октября 2010

Я столкнулся с проблемой при попытке обслуживать файлы с испанскими тильдами, связанной с кодировкой Content-Disposition.

Имя файла: "qué hacés ahora.docx"

Пока что способ обслуживания файлов в ASP.NET MVC добавляет этот заголовок, который отлично работает только в Firefox:

Content-Disposition: attachment; filename*=UTF-8''qu%C3%A9%20hac%C3%A9s%20ahora.docx

Я использую в контроллере:

return File(path, "application/octet-stream", originalNameWithAccents);

Это не работает в IE или Chrome.

Итак, я отправил себе по электронной почте файл в виде вложения, используя GMail. Используя firebug, чтобы увидеть, что происходит, Google Content-Disposition отправляет обратно:

Content-Disposition: attachment; filename="=?UTF-8?B?cXXDqSBoYWPDqXMgYWhvcmEuZG9jeA==?="

Обратите внимание, как имя закодировано в base64 (cXXDqSBoYWPDqXMgYWhvcmEuZG9jeA ==).

Итак, у меня есть 2 вопроса:

  1. Где спецификация для этого?
  2. Существуют ли какие-либо известные способы обслуживания файлов этого типа с помощью ASP.NET?

1 Ответ

0 голосов
/ 08 октября 2018

У меня была такая же проблема с именем файла. Имя файла как

 filename="=?utf-8?B?VGVzdG93eVBMSUvFgsSFw7PEh2FwaS5kb2N4?="

кодируется в base64 (VGVzdG93eVBMSUvFgsSFw7PEh2FwaS5kb2N4) кодировки utf-8 и оригинальное имя файла:

 TestowyPLIKłąóćapi.docx

Это способ получить имя файла:

string cdString = "attachment; filename=\"=?UTF-8?B?cXXDqSBoYWPDqXMgYWhvcmEuZG9jeA==?=\"";
string filename;

System.Net.Http.Headers.ContentDispositionHeaderValue val;
if (System.Net.Http.Headers.ContentDispositionHeaderValue.TryParse(cdString, out val))
    fileName = val.FileName.Replace("\"", "");
else
    throw new Exception("...");

А

fileName = "qué hacés ahora.docx"
...