2010-09-29 65 views
2

我有一個web視圖顯示的字符串爲 「SIWY &啪啦酒鬼」的Android的Java URLDecoder問題

我從網址提取它,我得到了一個字符串 「SIWY%2B%2526%2BPara%2BWino」。 //糾正

現在我試圖用URLDecoder來解決這個問題:

String decoded_result = URLDecoder.decode(url); // the url is "Siwy+%26+Para+Wino" 

然後我把它打印出來,我還是看到了 「SIWY +%26 +帕拉+酒鬼」

有誰能告訴我爲什麼?

回答

3

the documentation (of URLDecoder)

此類用於解碼其在應用程序/ x-WWW窗體-urlencoded MIME內容類型編碼的字符串。

我們可以看看at the specificationform-urlencoded MIME類型是什麼:

表單字段名稱和值轉義:空格字符由「+」置換後,保留的字符轉義每[URL];也就是說,非字母數字字符被替換爲'%HH',一個百分號和兩個代表字符ASCII碼的十六進制數字。與多行文本字段值一樣,換行符表示爲CR LF對,即'%0D%0A'。

由於該規範要求百分號後跟兩個十六進制數字的ASCII碼,你第一次調用decode(String s)方法,將其轉換成那些單個字符,留下兩個附加字符26完好。值%25轉換爲%,因此第一次解碼後的結果爲%26。再次運行解碼只需將%26轉換回&即可。

String decoded_result = URLDecoder.decode(URLDecoder.decode(url)); 

您也可以使用Uri類,如果你有UTF-8編碼字符串:

解碼 '%' - 使用UTF-8格式轉義八位組給定的字符串中。

然後使用:

String decoded_result = Uri.decode(Uri.decode(url)); 
1

感謝所有的答案,我解決了這個問題終於......

解決方案:

我用URLDecoder.decode後兩次(哦我的上帝),我得到了我想要的。

String temp = URLDecoder.decode(url); //  url = "Siwy%2B%2526%2BPara%2BWino" 
String result = URLDecoder.decode(temp); // temp = "Siwy+%26+Para+Wino" 

// result = "Swy & Para Wino". !!! oh good job. 

但我仍然不知道爲什麼..有人可以告訴我嗎?

+0

我已經編輯了我的答案,其中包括了這個原理的原因。 – Brian 2010-09-29 04:58:00