First, everything is working as expected. Your problem is, that the input-string is encoded twice. So simply decode it two times.
Example:
- Input:
%253A
- Decodes as:
%3A
- Decodes as:
:
Code:
String input = "40.2%2522%26url%3Dhttp%253A%252F%252Fr1";
String output1 = URLDecoder.decode(input, "UTF-8");
String output2 = URLDecoder.decode(output1, "UTF-8");
System.out.println(input);
System.out.println(output1);
System.out.println(output2);
Output:
40.2%2522%26url%3Dhttp%253A%252F%252Fr1
40.2%22&url=http%3A%2F%2Fr1
40.2"&url=http://r1
Note:
If it's uncertain how many times the string is encoded you could repeat decoding until result remains constant.
String input = "40.2%2522%26url%3Dhttp%253A%252F%252Fr1";
String output = input;
do {
input = output;
output = URLDecoder.decode(input, "UTF-8");
} while (!input.equals(output));