为什么URL未完全解码?

时间:2014-06-24 10:57:01

标签: java urldecode

我正在编写一个java程序,我的url需要解码,我正在使用

URLDecoder.decode(url,"UTF-8")

实现它的方法。但遗憾的是它并没有完全解码。例如。上面的方法将%3d解码为=,将%2B解码为+,但它不会解码像%3A%2F这样的少数字符,即使在解码后仍保持不变。请告诉我,如果我遗失了什么。

1 个答案:

答案 0 :(得分:7)

首先,一切都按预期工作。您的问题是,输入字符串被编码两次。所以简单地解码两次。

示例:

  1. 输入:%253A
  2. 解码为:%3A
  3. 解码为::
  4. <强>代码:

    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));