2013-01-14 65 views
3

我有一個像下面查詢字符串轉換%E1到%ufffd

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

%E1應該是á一個URL。當我從我的C#頁面調用Request.QueryString時,我收到

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

它對任何重音字符都這樣做。 %E1, %E3, %E9, %ED等全部通過爲%ufffd。正常編碼值(%2D,%2E,%27)全部正確傳遞。

配置文件已將全局化部分中的responseEncoding/requestEncoding設置爲UTF-8。

我怎樣才能讀取正確的值?

請注意,我不是生成查詢字符串的人,我無法控制它。

+0

也許你只是覺得這個網址看起來像這個%E1,因爲它在瀏覽器的地址欄中顯示,但實際上一直就是%ufffd? –

+1

@UweKeim,我可以直接鍵入URL並獲得相同的結果。它確實存在於查詢字符串上,它似乎在某個地方被破壞。 – Brandon

+0

iis請求跟蹤是否顯示有用的東西?例如。重寫是否發生?或者如何在客戶端上使用Microsoft網絡監視器? –

回答

3

儘管確實á編碼爲U+00E1,但UTF-8編碼(與URL參數相關)編碼爲0xC3 0xA1

您可以通過呼籲重音字母一個維基百科條目驗證,如http://en.wikipedia.org/wiki/%C3%81

U+FFFD是Unicode替換字符指示給定字符值不能被正確的Unicode編碼。

更新:

您的問題有兩點。

第一:如何將Unicode字符串編碼爲參數。使用

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

第二:如何檢索Unicode值?用途:

Request["q"] 

如果你從你不要管其他來源收到%E1,也許RawUrl可以幫助你。 (我還沒有試過)

+1

有沒有什麼辦法讓它在Unicode中正確編碼呢?基本上我必須根據查詢字符串驗證哈希碼來驗證它是否合法。這意味着我需要傳遞給我的* exact *字符串。我可以做一個字符串替換,但我仍然需要先獲得適當的值。 – Brandon

+1

'RawUrl'似乎給了我適當的價值。我想我可以自己拆分QueryString並進行解析。謝謝! – Brandon