gpt4 book ai didi

.net - 将 UTF-16 编码的 gzip 内容响应返回给浏览器

转载 作者:塔克拉玛干 更新时间:2023-11-01 19:12:28 25 4
gpt4 key购买 nike

我有许多文件保存到光盘并使用 gzip 压缩,因为它们最终将显示在浏览器中。我使用 ASP.NET MVC 并在代码中添加以下 header

Response.AppendHeader("Content-Encoding", "gzip");

我得到以下响应头

Cache-Control:private
Connection:Close
Content-Encoding:gzip
Content-Length:791
Content-Type:text/xml

几乎工作正常。这些文件是带有 UTF-16 XML 声明的 XML 文件。

<?xml version="1.0" encoding="utf-16"?>

为了让它在 IE 中正确显示,我还需要将响应编码为 UTF-16。 我需要在响应中更改什么才能在不破坏 gzip 解压缩等的情况下使其正常工作?

更新 #1

还尝试添加字符集 header 以返回以下响应 header

Cache-Control:private
Connection:Close
Content-Encoding:gzip
Content-Length:791
Content-Type:text/xml; charset=UTF-16

然而,这会破坏 gzip 压缩,结果是未压缩的 gzip 内容......

最佳答案

我无法重现您描述的场景。我认为您的方法没有任何问题,这使我相信问题出在其他地方。请按照我为验证您的代码中没有其他任何问题而采取的相同步骤进行操作,然后我们可以继续调试。

我使用 Visual Studio 生成了一个 UTF-16 编码的 xml 文件,然后使用 Total Commander 将其压缩到磁盘。

发送所需响应的快捷方式如下(在您的 mvc Controller 中)

public ActionResult Index()
{
var path = Server.MapPath("~/Content/test.xml.gz");
var result = new FilePathResult(path, "text/xml");

Response.AddHeader("Content-Encoding", "gzip");
Response.Charset = "utf-16";

return result;
}

现在,虽然这会起作用,但它不是在 MVC 中执行此操作的惯用方法,而且有点不受欢迎。正确的方法是实现您自己的操作结果,并让结果在执行时设置适当的 header 。使用这种方法可以在“干净”的 http 上下文中对结果进行后处理。

因此,这是此类操作结果的示例。

public class BinaryFileResult : FilePathResult
{
public string Charset { get; set; }
public string ContentEncoding { get; set; }

public BinaryFileResult(string fileName, string contentType) : base(fileName, contentType) { }

protected override void WriteFile(HttpResponseBase response)
{
if (this.Charset != null)
response.Charset = this.Charset;

if (this.ContentEncoding != null)
response.AppendHeader("Content-Encoding", this.ContentEncoding);

base.WriteFile(response);
}
}

有了这是我们的工具带,我们可以将操作方法​​简化为这样的东西

public ActionResult Index()
{
return new BinaryFileResult(Server.MapPath("~/Content/test.xml.gz"), "text/xml")
{
Charset = "utf-16",
ContentEncoding = "gzip"
};
}

使用这两种方法,我能够在 IE9 中查看正确解码的 xml 文件。试一试,让我知道它是否有效。

更新这是我用来测试它的文件。正如我所说,它们在我机器上的 IE9 上产生了适当的结果。

关于.net - 将 UTF-16 编码的 gzip 内容响应返回给浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10090975/

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