2009-11-16 3 views
2

응답 스트림에 쓸 :ASP.NET :이 사용하고 경우 Server.Execute의 BOM은()

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

하지만 난 응답 바이트 순서 표시를 얻고있다. 인코딩을 망쳐 놨니? BOM을 반환하지 않으려면 어떻게해야합니까?

EDIT : SOrry Rubens, 내 첫 번째 예가 잘못되었습니다.

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

편집을 :

답변

2

이 시도 그래서, 인코딩 강제로이 시도 : 인코딩 된 스트림을 반환)

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 비트 유니 코드이며 BOM이 없음)을 저장하고 들어오는 바이트를 디코딩하는 방법을 알지 못합니다. 따라서 응답의 BOM은 문자열에서 문자 그대로가됩니다.

대신 MemoryStream()에 쓰기를 시도한 다음 으로 디코딩하여 Server.Execute()가 다시 전달하는 인코딩 (UTF-8 또는 무엇이든)을 사용하여 문자열로 되돌립니다. 그런 다음이를 구문 분석하여 응답에 다시 쓸 수 있습니다.