我正在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語句。就好像角色沒有被識別。
我是否正在從查詢字符串中獲取值並轉換爲字符串的方式做錯了什麼?