内容处理特殊字符

时间:2010-10-06 05:56:08

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

我在尝试提供与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 ==)。

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

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

1 个答案:

答案 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"