tags:

views:

41

answers:

3

i have a String displayed on a WebView as "Siwy & Para Wino"

i fetch it from url , i got a string "Siwy%2B%2526%2BPara%2BWino". // be corrected

now i'm trying to use URLDecoder to solve this problem :

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

then i print it out , i still saw "Siwy+%26+Para+Wino".....Orz could anyone tell me why?

A: 

The Html class is supposed to do that. Try this

Html.fromHtml(string);
ArtWorkAD
A: 

From the documentation (of URLDecoder):

This class is used to decode a string which is encoded in the application/x-www-form-urlencoded MIME content type.

We can look at the specification to see what a form-urlencoded MIME type is:

The form field names and values are escaped: space characters are replaced by '+', and then reserved characters are escaped as per [URL]; that is, non-alphanumeric characters are replaced by '%HH', a percent sign and two hexadecimal digits representing the ASCII code of the character. Line breaks, as in multi-line text field values, are represented as CR LF pairs, i.e. '%0D%0A'.

Since the specification calls for a percent sign followed by two hexadecimal digits for the ASCII code, the first time you call the decode(String s) method, it converts those into single characters, leaving the two additional characters 26 intact. The value %25 translates to % so the result after the first decoding is %26. Running decode one more time simply translates %26 back into &.

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

You can also use the Uri class if you have UTF-8-encoded strings:

Decodes '%'-escaped octets in the given string using the UTF-8 scheme.

Then use:

 String decoded_result = Uri.decode(Uri.decode(url));
Brian
A: 

thanks for all answers , i solved it finally......

solution:

after i used URLDecoder.decode twice (oh my god) , i got what i want.

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.

but i still don't know why.. could someone tell me?

peterlawn
I've edited my answer to include background on the reason this works.
Brian