2010-08-15 80 views
2

您好!ASP.NET MVC 2 - 請求編碼問題

有一個控制器和接收打通一個PARAM的動作,約在這裏這樣:

www.site.com/controller/action/?query=параметр< - 俄語單詞

問題:

例1:www.site.com/controller/action/?query=Пример< - 俄語單詞

實施例2:www.site.com/controller/action/?query=Example

讀PARAM:

var param = Request.QueryString["query"]; 

結果1:

param = "������" 

從調試器的數據:

Request.RawUrl = "/controller/action/?q=%CF%F0%E8%EC%E5%F0" 
QueryString = {q=%ufffd%ufffd%ufffd%ufffd%ufffd%ufffd} 

結果2:

param = "Example" 

從調試器的數據:

Request. RawUrl = "/controller/action/?q=Example" 
QueryString = {q=Example} 

ContentEncoding內置於UTF-8。

Web.config: 
<globalization requestEncoding="utf-8" responseEncoding="utf-8" 
      fileEncoding="utf-8" /> 

問: 我怎麼能得到正確使用俄語單詞PARAM?

回答

0
HttpUtility.UrlDecode(Request.QueryString["q"], Encoding.Default) 

解決了這個問題。

+0

您應該將問題標記爲已回答 – 2010-09-08 18:10:59

2

你不應該在URI中使用俄語單詞(идаженестоитпробовать)。你應該編碼它們。

RFC 1738:統一資源定位器(URL)規範

..Only字母數字[0-9A-ZA-Z],特殊字符 「$ -_ + *'()!」[不包括[引用]以及用於其保留目的的保留字符可以在URL內未經編碼使用。

如果用戶打算用俄語輸入網址自己 - (搜索),您可以嘗試UrlDecode Request.Url

+0

非常感謝! UrlDecode的作品。 HttpUtility.UrlDecode(Request.QueryString [「q」],Encoding.Default); 但很奇怪的是,Encoding.Default是win-1251。我出於某種原因認爲Win7完全使用Unicode :( – meridian 2010-08-16 08:50:36