用含有%的字符串使用时的Java URLDecoder抛出异常(Java URLDecoder th

2019-09-17 05:46发布

我对Java的URLDecoder的问题。 我逃避在JavaScript字符串,并将其发送到一个Java servlet。 然后,我解码具有以下行的转义字符串:

URLDecoder.decode(request.getParameter("text"), "UTF-8");

这工作得很好,每特殊字符我都试过了,只有一个决策问题是“%”。 每次我在字符串中使用这个角色,我得到以下异常:

java.lang.IllegalArgumentException: URLDecoder: Incomplete trailing escape (%) pattern
    java.net.URLDecoder.decode(URLDecoder.java:187)
    at.fhv.students.rotter.ajax.count.CountServlet.doGet(CountServlet.java:31)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

这是一个已知的错误? 或者是它真的是我错了吗?

Answer 1:

这是不是一个错误。 你发错编码的字符串。 所述% -sign必须被编码为%25

如果你调用的request.getParameter(),我觉得你得到一个解码的字符串。



Answer 2:

我们在角应用也有类似的问题,即我们在编码%的客户端代码登录一次即可。 当我们的servlet收到的价值这是由于已经解码request.getParameter() 既然我们已经有了URL解码器在我们的服务器端代码,解码%征两次导致"URLDecoder: Incomplete trailing escape (%) pattern"的例外。 我们想通了,我们我们不应该编码和解码%作为价值可言拿到面对这个问题。



Answer 3:

为了得到参数我已经写

String requestURL=request.getQueryString(); 

因此,它会给我们的参数。 从我们可以使用String.substring()来获得首选参数固定长度或单一参数的情况下。 然后

String decodeValue = URLDecoder.decode(value,"UTF-8"); 

将获得较佳的字符串编码%符号了。



Answer 4:

即使我面临着类似的问题,它解决了。 以下是示例代码,你可以简单地运行重现和解决这个问题。

public class TestPercentage {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String transResult = "Se si utilizza DHCP%2C i valori validi sono S%C3%AC o No.%24%23%24%23%24%23%25NICyUSEWINS%25%24%23%24%23%24%23Se si utilizza WINS%2C i valori validi sono S%C3%AC o No.%24%23%24%23%24%23%25NODEFULL%25%24%23%24%23%24%23Nome completo del computer%24%23%24%23%24%23%25NODENAME%25%24%23%24%23%24%23I primi 8 caratteri del nome effettivo del computer%24%23%24%23%24%23%25NWCONTEXT%25%24%23%24%23%24%23Nome contesto NetWare%24%23%24%23%24%23%25NWSERVER%25%";
        String decode = null;
        try {
            decode = URLDecoder.decode(transResult, "UTF-8");
        } catch (UnsupportedEncodingException ue) {
            System.out.println("UnsupportedEncodingException ! = " + ue);
        } catch (IllegalArgumentException ile) {
            System.out.println("IllegalArgumentException ! = " + ile);
            if (transResult.endsWith("%")) {
                transResult = transResult.substring(0, transResult.lastIndexOf("%"));
                System.out.println("transResult2 = " + transResult);
                try {
                decode = URLDecoder.decode(transResult, "UTF-8");
                } catch (UnsupportedEncodingException ue2) {
                    System.out.println("UnsupportedEncodingException 2 = " + ue2);
                } catch (IllegalArgumentException ile2) {
                    System.out.println("IllegalArgumentException ! = " + ile2);
                }
            }
        }
        System.out.println("decode = " + decode);
    }

}


文章来源: Java URLDecoder throws exception when used with a string containing a %