2010-01-21 9 views
0

我正在VS2005中開發一個通用的HTTP處理程序並在調試模式下對其進行測試。除查詢字符串包含高位字符(例如拉丁文小字母刺/ u00FE +和拉丁小寫字母Ae/u00E6 æVS2005 UTF-8通用HTTP處理程序:與查詢字符串中的某些字符有關的問題(例如:+)

我的機器上的IE8被設置爲發送UTF-8 URL。我打字調試代碼時,以下爲IE8地址欄:

 
    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()是否不解碼字節?

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

在HTTP處理程序,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必須已經被編碼。