我使用以下代码将文件从服务器发送到客户端:
Response.AppendHeader("content-disposition", "attachment; filename=" + FileName);
Response.ContentType = MimeType;
Response.WriteFile(PathToFile);
Response.End();
这很好用。问题是,当我从 Internet Explorer 下载文件时,特殊字符(例如丹麦语 æ、ø 和 å)会被错误解释。因此,我将名称为“Test æ ø å file.txt”的文件下载为“Test �_à_ॠfile.txt”
我尝试将字节顺序标记添加到响应中:
byte[] BOM = { 0xEF, 0xBB, 0xBF };
Response.BinaryWrite(BOM);
并设置字符集:
Response.Charset = "UTF-8";
Response.ContentEncoding = System.Text.Encoding.UTF8;
但如果有帮助的话就没有。
这似乎只是 Internet Explorer 中的问题。
标头不使用内容的编码,因此更改内容编码没有帮助。有一个指定标头参数编码的标准,但它相当新,因此并非所有浏览器都完全支持它:
http://greenbytes.de/tech/webdav/rfc5987.html http://greenbytes.de/tech/webdav/rfc5987.html
这是对名称进行编码的方式:
string FileName = "Test æ ø å file.txt";
string name = String.Concat(Encoding.UTF8.GetBytes(FileName).Select(b => {
if ((b >= 48 && b <= 57) || (b >= 65 && b <= 90) || (b >= 97 && b <= 122)) {
return new String((char)b, 1);
} else {
return String.Format("%{0:x2}", b);
}
}).ToArray());
Response.AppendHeader("content-disposition", "attachment; filename*=UTF-8''" + name);
标题中结束的文本如下所示:
attachment; filename*=UTF-8''Test%20%c3%a6%20%c3%b8%20%c3%a5%20file%2etxt
注意:该代码对除字母数字之外的所有字符进行编码。这是可行的,但并非所有其他字符都需要编码。在检查标准后,您可以改进代码以保留更多未编码的字符。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)