あなたが説明しているシナリオを再現できません。問題がどこかにあると私に信じさせるあなたのアプローチには何の問題もありません。コード内で他に何も壊れていないことを確認するために行ったのと同じ手順に従ってください。その後、デバッグを続行できます。
Visual Studio を使用して UTF-16 でエンコードされた xml ファイルを生成し、Total Commander を使用してディスクに gzip しました。
必要な応答を送信する簡単な方法は、次のようになります (mvc コントローラーで)
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 でそれを行う慣用的な方法ではなく、少し眉をひそめています。適切な方法は、独自のアクション結果を実装し、実行時に結果に適切なヘッダーを設定させることです。このアプローチを使用すると、結果の後処理を「クリーンな」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"
};
}
これらの方法の両方を使用して、適切にデコードされた xml ファイルを IE9 で見ることができます。試してみて、うまくいくかどうか教えてください。
更新
テストに使用したファイルは次のとおりです。私が言ったように、私のマシンのIE9で適切な結果が得られます。