2

これを使用して、応答ストリームに書き込みます。

    using (var writer = new StringWriter())
    {
        context.Server.Execute(virtualpath, writer);
        string s = writer.ToString().Replace(...);
        context.Response.Write(s);
    }

しかし、応答でバイト オーダー マークを取得しています。エンコーディングを台無しにしていますか?BOM を返却しない方法を教えてください。

編集: 申し訳ありませんルーベンス、私の最初の例は間違っていました。

4

2 に答える 2

2

これを試して:

context.Server.Execute(virtualpath, context.Response.Output);

編集:だから、あなたのエンコーディングを強制するためにこれを試してください:

MemoryStream ms = new MemoryStream();
StreamWriter writer = new StreamWriter(ms);
context.Server.Execute(virtualpath, writer);
context.Response.Write(Encoding.UTF8.GetString(ms.ToArray()).Replace(...));
于 2009-11-16T23:08:30.463 に答える
1

Server.Execute() はエンコードされたストリームを返しますが、StringWriter() は単純な .NET 文字列 (16 ビット Unicode で BOM がない) を格納することを目的としており、着信バイトをデコードする方法を知りません。したがって、応答の BOM は文字列のリテラル文字になります。

代わりに MemoryStream() に書き込んでから、Server.Execute()が返すエンコーディング (UTF-8 など) を使用して文字列にデコードして戻します。次に、それを解析して応答に書き戻すことができます。

于 2009-11-16T23:29:32.237 に答える