我正在编写一个java程序,我的url需要解码,我正在使用
URLDecoder.decode(url,"UTF-8")
实现它的方法。但遗憾的是它并没有完全解码。例如。上面的方法将%3d
解码为=
,将%2B
解码为+
,但它不会解码像%3A%2F
这样的少数字符,即使在解码后仍保持不变。请告诉我,如果我遗失了什么。
答案 0 :(得分:7)
首先,一切都按预期工作。您的问题是,输入字符串被编码两次。所以简单地解码两次。
示例:强>
%253A
%3A
:
<强>代码:强>
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);
<强>输出:强>
40.2%2522%26url%3Dhttp%253A%252F%252Fr1
40.2%22&url=http%3A%2F%2Fr1
40.2"&url=http://r1
注意:强> 如果不确定字符串编码的次数,您可以重复解码,直到结果保持不变。
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));