2011-11-10 61 views
2

我提交編碼的Unicode字符丟失

MyApp.aspx?url=http://product.cn.china.cn/selling-leads/%C8%BC%C6%F8%D4%EE%BE%DF/ 

URL作爲GET請求我的ASP.NET應用程序。中文字符以url編碼。我想讀與

httpRequest.Params["url"] 

URL參數值,並獲得導致這樣

http://product.cn.china.cn/selling-leads/ȼ�����/ 

的編碼部分丟失。哪裏有問題?

+0

什麼是您所期待的實際字符? – Cocowalla

+0

提交的網址相同。我失去了部分%C8%BC%C6%F8%D4%EE%BE%DF – Tomas

+0

我的意思是,你期望的*中文*字符是什麼? :) – Cocowalla

回答

0

好吧,我有同樣的問題用希伯來語

你必須使用HttpUtility.UrlDecode和HttpUtility.UrlEncode()

像這樣

dim str=HttpUtility.UrlEncode("the string that add to the url") 

(當然送str中的url)

而在接收頁面中使用這個

dim temp as string=HttpUtility.UrlDecode(httpRequest.Params["url"] , System.Text.Encoding.Default()) 

你可以做到這一點在JavaScript太

escape(value)是一個函數的文本編碼

,你可以在服務器端像這樣使用:

dim temp as string=HttpUtility.UrlDecode(httpRequest.Params["url"] , System.Text.Encoding.Default()) 
2

確定的字符已在URL中正確編碼?

如果我URL的eNode 公共汽車,我得到%E5%85%AC%E5%85%B1%E6%B1%BD%E8%BB%8A

如果我在%E5%85%AC%E5%85%B1%E6%B1%BD%E8%BB%8A傳遞,因爲它工作正常的查詢參數,但不與你的字符串,%C8%BC%C6%F8%D4%EE%BE%DF

如果我嘗試使用online URL encoder/decoder解碼字符串,它也不起作用,同樣如果我嘗試System.Text.Encoding.UTF8.GetString

所以我認爲問題是你提交的字符串編碼不正確。

** UPDATE **

經仔細檢查它出現在你的URL字符串中的字符是GBK編碼(鏈接到頁面也說,在使用的字符集是GBK)。

我不確定如何做到這一點,但如果你想在另一種編碼的URL參數,你將需要從GBK轉換到其他編碼。

** UPDATE **

OK,我想我知道了:)

它看起來像ASP.NET的解碼使用了錯誤的編碼的URL。您可以強制ASP.NET解碼請求作爲GBK加給你的web.config文件:

<system.web> 
    <globalization requestEncoding="gbk" /> 
</system.web> 

如果由於某種原因你不想這樣做,那麼你將需要分析和解碼原始URL自己:

// TODO: Grab this from Request.RawUrl 
string urlParam = "%C8%BC%C6%F8%D4%EE%BE%DF"; 

// Source encoding is GBK 
Encoding gbk = Encoding.GetEncoding("gbk"); 

string decodedParam = HttpUtility.UrlDecode(urlParam, gbk); 

decodedParam現在將包含你想要什麼,燃氣竈具(「燃氣竈」,我認爲:)

+0

這個URL是在瀏覽器時從Chrome瀏覽器中獲取的,所以它不能被非正式編碼。此外,嘗試在瀏覽器中粘貼此網址,網頁將正確打開http://product.cn.china.cn/selling-leads/%C8%BC%C6%F8%D4%EE%BE%DF/ – Tomas

+0

網址通常使用UTF-8編碼,我猜ASP.NET應該這樣做。 – Max

+0

GB編碼的URI與IRI不兼容,所以在現代瀏覽器中不能很好地顯示(如http://product.cn.china.cn/selling-leads/公共汽車'),並且不會給你搜索在路徑中具有關鍵字的引擎優勢。我強烈建議移動到UTF-8編碼的URI。 – bobince