2010-08-10 2 views
0

이것은 힘든 일입니다. 브라우저에 다시 튀기기 전에 html을 변환하는 응답 필터 설정이 있습니다 (http://aspnetresources.com/articles/HttpFilters). 이것은 모든 기계에서 잘 작동하지만 내 것입니다. 실제로 잠겨 있기 때문에 하드 리셋을해야만 컴퓨터가 작동하고있었습니다.System.Text.Ecoding.UTF8.GetString은 정크를 반환합니다.

public override void Write(byte[] buffer, int offset, int count) 
{ 
    string strBuffer = System.Text.UTF8Encoding.UTF8.GetString(buffer, offset, count); 

strBuffer에는 HTML이 포함되어 있습니다. 어떤 이유로 든 그것은 나를 위해 쓰레기 문자를 반환합니다. 어떤 아이디어? 나는 머리카락을 꺼내고있어 !!

업데이트

은 "동적 콘텐츠 압축 사용"문제를 일으키는 것으로 밝혀졌습니다. 어떤 이유로 필터에 전달되기 전에 gzip으로 처리됩니다.

문제 해결의 Web.config에서 false로 "dynamicCompressionBeforeCache 설정"솔루션

.

<urlCompression doStaticCompression="true" doDynamicCompression="true" dynamicCompressionBeforeCache="false" /> 
+0

버퍼를 검사하여 돌아 오는 실제 바이트를 살펴보십시오. 유니 코드처럼 보입니까, 그렇지 않습니까? – mquander

+0

유니 코드는 정확히 어떤 모양입니까? 처음 몇 바이트는 31, 139, 8, 0, 0, 0, 0, 0, 4 ... – Micah

답변

0

소리가 잘못되었습니다. 나는 잠시 후 이상한 행동을했다. 나를 위해 일한 것은 C : \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET 파일의 임시 파일을 삭제하는 것이 었습니다

+0

여러 번 시도했습니다. 그것은 일반적으로 wierdness를 정리하는 트릭을하지만, 이번에는 그렇지 않습니다. – Micah

0

지정하신 바이트는 31, 139, 8, 0입니다. , 0, 0, 0, 0, 4

유효하지 않은 UTF-8입니다. 특히 유니 코드 문자 U + 0031 ("INFORMATION SEPARATOR ONE") 다음에 바이트 139와 8 ... 그리고 139가 이어지고 유효한 바이트 순서가 UTF-8이 아님을 의미합니다. 비록 그 사람들이 으로 만들었다 고해도 유효한 시퀀스라면 유니 코드 U + 0000 문자 (NUL)와 U + 0004 (전송 끝)이 이어집니다. 유효한 HTML이 거의 없습니다.

나는 당신이 무엇인지 모른다. 실제로는 필터링이지만, 유효한 UTF-8 텍스트는 아니다. 실제로 텍스트 일 ​​가능성은 거의 없습니다. 실제로 이미지와 같은 바이너리 데이터에 필터를 적용하려고 할 가능성이 있습니까?

필터링 방법에 또 다른 근본적인 문제가 있습니다. 각 버퍼에 텍스트가 포함되어 있다고 가정합니다. 캐릭터의 첫 번째 절반을 포함하는 하나의 버퍼와 그 나머지를 포함하는 두 번째 버퍼를받는 것이 가능합니다. 그게 바로 System.Text.Decoder 인터페이스입니다 - 부분적인 문자를 기억하는 것은 상태 유지입니다.

+0

"동적 콘텐츠 압축 사용"이 해제 된 것으로 보입니다. 내 필터로 전달되기 전에 데이터가 압축되는 이유는 무엇입니까? 압축이 사슬 아래로 더 어딘가에서 발생합니까? 모듈 선언 순서가 중요합니까? – Micah

+0

@Micah : 나는 두렵다, 나는 두렵다. 그러나 이것이 압축되어 있으면 이것이 왜 왜 텍스트 데이터가 아닌지 설명 할 수있을 것이다. –

관련 문제