【问题标题】:Content-Disposition Special Characters内容处置特殊字符
【发布时间】:2011-04-21 15:41:20
【问题描述】:

我在尝试提供带有西班牙波浪线的文件时遇到了一个与 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==)。

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

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

【问题讨论】:

标签: utf-8 asp.net-mvc-2 internationalization content-disposition


【解决方案1】:

我的文件名也有同样的问题。像

这样的文件名
 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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多