我在尝试提供与Content-Disposition编码相关的西班牙语波浪号文件时遇到了问题。
文件名是“quéhacésahora.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查看正在发生的事情,谷歌发送回来的Content-Disposition是:
Content-Disposition: attachment; filename="=?UTF-8?B?cXXDqSBoYWPDqXMgYWhvcmEuZG9jeA==?="
注意名称是如何编码的(cXXDqSBoYWPDqXMgYWhvcmEuZG9jeA ==)。
所以,到目前为止,我有两个问题:
答案 0 :(得分: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"