4

在尝试使用与 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 将文件作为附件通过电子邮件发送给自己。使用萤火虫查看发生了什么,谷歌发送回的内容处置是:

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

请注意名称是如何使用 base64 编码的 (cXXDqSBoYWPDqXMgYWhvcmEuZG9jeA==)。

所以,到目前为止我有两个问题:

  1. 这方面的规范在哪里?
  2. 是否有任何已知的方法可以使用 ASP.NET 提供这种类型的文件名?
4

1 回答 1

0

我对文件名有同样的问题。文件名如

 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"
于 2018-10-08T13:14:17.257 回答