gpt4 book ai didi

asp.net - Response.Write - Internet Explorer 中的文件名编码错误

转载 作者:行者123 更新时间:2023-12-02 05:17:24 27 4
gpt4 key购买 nike

我使用以下代码将文件从我的服务器发送到客户端:

Response.AppendHeader("content-disposition", "attachment; filename=" + FileName);
Response.ContentType = MimeType;
Response.WriteFile(PathToFile);
Response.End();

这很好用。问题是,当我从 Internet Explorer 下载文件时,特殊字符(如丹麦语 æ、ø 和 å)会被错误解释。所以我将名为“Test æ ø å file.txt”的文件下载为“Test æ_ø_Ã¥ f​​ile.txt”

我尝试将字节顺序标记添加到响应中:

byte[] BOM = { 0xEF, 0xBB, 0xBF };
Response.BinaryWrite(BOM);

并设置字符集:

Response.Charset = "UTF-8";
Response.ContentEncoding = System.Text.Encoding.UTF8;

但如果它有帮助,那就没有了。这似乎只是 Internet Explorer 中的问题。

最佳答案

header 不使用内容的编码,因此更改内容编码无济于事。有一个指定 header 参数编码的标准,但它很新,因此不会在所有浏览器中得到完全支持:

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

注意:该代码对除字母数字以外的所有字符进行编码。这行得通,但并非所有其他字符都需要编码。在检查标准后,您可以改进代码以留下更多未编码的字符。

关于asp.net - Response.Write - Internet Explorer 中的文件名编码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14434239/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com