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 回答