Content-Disposition特殊字符

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将文件作为附件发送给自己。使用firebug查看情况,Google返回的Content-Disposition是:

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

注意名称是base64编码的(cXXDqSBoYWPDqXMgYWhvcmEuZG9jeA==)。

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

  1. 这方面有什么规范吗?
  2. 是否有任何已知的使用ASP.NET提供此类型文件名的方法?

1
1:http://en.wikipedia.org/wiki/MIME#Encoded-Word和http://tools.ietf.org/html/rfc2047 - Habbie
可能是重复的 https://dev59.com/SXVD5IYBdhLWcg3wGHeu - Tadeusz A. Kadłubowski
与此同时,第一种格式也适用于Chrome和IE9。另请参阅RFC 6266。 - Julian Reschke
是的,dup --- 前往上面的链接。Tadeusz A. Kadłubowski - 感谢您指引我们正确的方向! - gdibble
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"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接