我正在構建一個使用HttpListener
來處理請求的簡單服務器。如果有必要,我發送給它的查詢字符串參數是url編碼。例如,要發送漢字字符串"尺八"
,編碼是"%E5%B0%BA%E5%85%AB"
。如何處理HttpListenerRequest中的Url編碼?
我的示例網址是"/?q=%E5%B0%BA%E5%85%AB"
。
在我的上下文的回調,我有:
HttpListenerContext context = Listener.EndGetContext();
string rawUrl = context.Request.RawUrl;
string query = context.Request.QueryString["q"];
檢查結果,我得到:
rawUrl = "/?q=%E5%B0%BA%E5%85%AB"
query = "尺八"
但是,如果我看context.Request.Url
,我得到{http://localhost:8080/?q=尺八}
。
看起來好像使用UTF-8以外的編碼對context.Request.QueryString
中的查詢字符串進行了解碼。
我的解決方法是忽略context.Request.QueryString
,並通過這樣做創建自己:
var queryString = HttpUtility.ParseQueryString(context.Request.Url.Query);
這給了我正確的值,但它似乎是一個黑客的東西。
有什麼辦法可以告訴HttpListener
(或上下文或請求)將查詢字符串解釋爲UTF-8,我認爲這是標準嗎?或者我應該只用這種解決方法?
你確定有一些不錯的查詢字符串:D – 2011-03-03 12:33:25
Downvoter?習慣上提供解釋性評論。 – 2014-12-17 15:19:01