2010-01-21 1 views
0

VS2005에서 일반 HTTP 처리기를 개발하고 디버그 모드로 테스트하고 있습니다. 쿼리 문자열에 상위 비트 문자가 포함 된 경우를 제외하고는 잘 작동합니다. 라틴 소문자 가시/u00FE " 및 라틴 소문자 Ae/u00E6 æ.VS2005 UTF-8 일반 HTTP 처리기 : 쿼리 문자열의 특정 문자 문제 (예 : þ æ)

내 컴퓨터의 IE8이 UTF-8 URL을 보내도록 설정되어 있습니다. 내가 코드를 디버깅 할 때 Internet Explorer 8의 주소 표시 줄에 다음을 입력하고 :

 
    http://app/myHandler.ashx?term=foo // everything works 
    http://app/myHandler.ashx?term=þorn // does not work -- query from database fails 

데이터베이스 SQLite는이며 UTF-8 인코딩을 사용하고 그것을 잘 작동합니다. 이러한 특수 문자를 사용하는 쿼리는 다른 GUI 도구를 사용하거나 Visual Studio에 System.Data.SQLite GUI 추가 기능을 사용하여 SQLite에 대해 직접 실행될 때 제대로 작동합니다.

쿼리 문자열의 값을 올바르게 디코딩합니까? GetString()은 바이트를 디코딩하지 않습니까? HTTP 처리기에서

 
    public StandardRequest(HttpContext context) 
    { 
     UTF8Encoding utf8 = new UTF8Encoding(); 

     if (context.Request.QueryString["term"] != null) 
     {    
      byte[] w = utf8.GetBytes(context.Request.QueryString["term"]); 
      word = utf8.GetString(w); 
      ... 

는 ContentEncoding는 UTF-8로 설정됩니다

  context.Response.ContentEncoding = System.Text.Encoding.UTF8;

디버거의의 로컬 창에서

는 Request.ContentEncoding는 UTF-8입니다.

하지만 지역 창에서 쿼리 문자열 값, 쿼리 문자열 '가시'에서 용어으로 표시되고 '[] ORN'을 검사하고 그가에 표시되는 방법을 때 내가 데이터베이스로 보내는 SQL 문. 마치 캐릭터가 인식되지 않은 것입니다.

값을 쿼리 문자열에서 가져 와서 문자열로 변환하는 방식에 문제가 있습니까?

답변

0

복호화하기 전에 context.Request.QueryString["term"]에는 정수가 포함되어 있습니까? 어쩌면 이미 당신이 원하는 가치가있을 것입니다. 현재 바이트가 UTF8이 아닌 경우 utf8.GetBytes은 도움이되지 않습니다.

0

팁, eed3si9n 주셔서 감사합니다. 그것은 나를 해결책으로 이끌었다.

IE에서 손으로 입력 한 문자를 주소 표시 줄에 입력 한 문자를 설정에서 지정한 인코딩으로 변환한다는 인상을받습니다. 그렇지 않습니다. 입력 된 URL은 이미 인코딩되어 있어야합니다.