2012-05-14 16 views
5

Tengo un problema con el URLDecoder de Java. Estoy escapando un String en JavaScript y lo envío a un servlet java. Entonces decodificar la cadena escapada con la siguiente línea:Java URLDecoder arroja una excepción cuando se utiliza con una cadena que contiene un%

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

Esto funciona muy bien para cada caracteres especiales que he probado, la única en hacer problemas es el '%'. Cada vez que uso este caracter en la cadena, recibo la siguiente excepción:

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) 

¿Este es un error conocido? ¿O es realmente mi error?

+0

"Estoy escapando de una cadena en JavaScript". ¿Cómo? Debes estar haciéndolo mal. – EJP

Respuesta

6

No es un error. Usted envía una cadena codificada incorrecta. El % -sign tiene que estar codificado como %25

Si llama a request.getParameter(), creo que obtiene un String decodificado.

+0

Tienes razón, getParameter ya decodifica, ¡gracias! –

0

el fin de obtener parámetros que han escrito

String requestURL=request.getQueryString(); 

para que nos dará parámetros. De eso podemos usar String.substring() para obtener el parámetro preferido en caso de longitud de corrección o parámetro único. A continuación,

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

obtendrán el signo de% de cadena codificada preferida también.

1

Tuvimos un problema similar en nuestra aplicación angular donde estábamos codificando % firmar una vez en el código del lado del cliente. Cuando recibimos el valor en servlet, ya se decodificó debido a request.getParameter(). Como ya teníamos decodificador de URL en nuestro código del lado del servidor, la decodificación del signo % dos veces estaba provocando una excepción "URLDecoder: Incomplete trailing escape (%) pattern". Nos dimos cuenta de que no deberíamos codificar y decodificar % como un valor para hacer frente a este problema.

Cuestiones relacionadas