2013-01-14 1 views
3

나는 %E1á 있어야하는데 다음과 같은QueryString을 변환 % E1은 % ufffd을

http://mysite.com/default.aspx?q=%E1 

같은 URL이 있습니다. 나는 내 C# 페이지에서 Request.QueryString를 호출 할 때 나는

http://mysite.com/default.aspx?q=%ufffd 

그것은 어떤 악센트 문자에 대해이 작업을 수행

을받을 수 있습니다. %E1, %E3, %E9, %ED 등은 모두 %ufffd으로 전달됩니다. 일반 인코딩 값 ( %2D, %2E, %27)이 모두 올바르게 전달됩니다.

구성 파일이 이미 UTF-8로 설정 세계화 섹션에서 responseEncoding/requestEncoding 있습니다.

올바른 값을 어떻게 읽을 수 있습니까?

쿼리 문자열을 생성하는 사람이 아니므로이 컨트롤을 제어 할 수 없습니다.

+0

URL의 % E1이 브라우저의 주소 표시 줄에 표시되어 있기 때문에 실제로 % ufffd와 (과) 비슷해 보일 수도 있습니다. –

+1

@UweKeim, 동일한 결과로 직접 URL을 입력 할 수 있습니다. 그것은 쿼리 문자열에 존재하며, 어딘가에 엉망이 된 것처럼 보입니다. – Brandon

+0

iis 요청 추적으로 유용한 정보가 표시됩니까? 예 : 다시 쓰기가 발생하는지 여부 아니면 클라이언트에서 Microsoft 네트워크 모니터를 사용하는 것이 어떻습니까? –

답변

3

áU+00E1으로 인코딩되어 있지만 URL 매개 변수와 관련된 UTF-8 인코딩은 0xC3 0xA1입니다.

당신은

U+FFFD 같은 http://en.wikipedia.org/wiki/%C3%81가 주어진 문자 값이 올바르게 유니 코드로 인코딩 할 수없는 나타내는 유니 코드 대체 문자, 악센트 편지에 위키 백과 항목이라고하여 확인할 수 있습니다.

업데이트 :

귀하의 질문에 2 점이 있습니다.

첫 번째 : 유니 코드 문자열을 매개 변수로 어떻게 인코딩합니까? 사용

"?q=" + HttpUtility.UrlEncode(value) 

둘째 : 유니 코드 값을 어떻게 검색합니까? 사용

Request["q"] 

당신이 제어 할 수없는 다른 소스에서 %E1를받은 경우, 어쩌면 RawUrl는 당신을 도울 수 있습니다. (시도하지는 않았습니다)

+1

유니 코드로 올바르게 인코딩 할 수있는 방법이 있습니까? 기본적으로 합법적인지 확인하기 위해 쿼리 문자열에 대해 해시 코드의 유효성을 검사해야합니다. 즉, 나에게 전달 된 정확한 문자열이 필요하다는 뜻입니다. 문자열 대체를 할 수는 있지만 적절한 값을 먼저 가져야합니다. – Brandon

+1

'RawUrl'이 나에게 적절한 가치를 부여하는 것 같습니다. 나는 QueryString을 나눠서 파싱 할 수 있다고 생각한다. 감사! – Brandon

관련 문제