2009-11-16 43 views
2

我使用這個寫入響應流:ASP.NET:BOM中使用Server.Execute()

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

但我的迴應得到一個字節順序標記。我搞砸了編碼?如何不返回BOM?

編輯:SOrry魯本斯,我的第一個例子是不正確的。

回答

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(...)); 
1

使用Server.Execute()返回的編碼流,但StringWriter的()意存儲簡單的.NET字符串(它是16位的Unicode並且沒有BOM)並且不知道如何解碼傳入的字節。因此,響應中的BOM成爲字符串中的文字字符。

嘗試寫入一個MemoryStream()來代替,然後解碼其放回使用取其編碼(UTF-8或其他)的字符串的使用Server.Execute()被回傳。然後,您可以解析它並將其寫回您的回覆。