java urlencode

URL Codificar y decodificar caracteres especiales en Java



urlencode (4)

En Java, necesito usar HTTP Post para enviar una solicitud al servidor, pero si en el parámetro de la URL contiene algún carácter especial, aparece debajo de Excepción

java.lang.IllegalArgumentException: URLDecoder: caracteres hexadecimales ilegales en el patrón de escape (%) - Para la cadena de entrada: "& ''"

El código para enviar datos.

DefaultHttpClient httpclient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(URL); String sessionId = RequestUtil.getRequest().getSession().getId(); String data = arg.getData().toString(); List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair(param1, data)); params.add(new BasicNameValuePair(param2, sessionId)); httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8")); HttpResponse response = (HttpResponse) httpclient.execute(httpPost);

Y en el lado del servidor, uso el siguiente código para leer la información

String data = request.getParameter(param1); if (data != null) { actionArg = new ChannelArg(URLDecoder.decode(data, "UTF-8")); }

El código funciona correctamente, pero si ingreso algún carácter especial como [a あ あ # $% & ''(<>? /., あ あ あ あ あ あ], se producirá una excepción. Me pregunto si alguien podría ayudarme con alguna sugerencia para poder codificar. y decodificar caracteres especiales?

Muchas gracias por adelantado.



Para codificar texto para un paso seguro a través de las redes internas:

import java.net.*; ... try { encodedValue= URLEncoder.encode(rawValue, "UTF-8"); } catch (UnsupportedEncodingException uee) { }

Y para decodificar:

try { decodedValue = URLDecoder.decode(rawValue, "UTF-8"); } catch (UnsupportedEncodingException uee) { }


prueba la guayaba

utilizar com.google.common.net.UrlEscapers

funciona bien con chino

Me gusta esto:

Escaper escaper = UrlEscapers.urlFragmentEscaper(); String result = escaper.escape(yoururl);


String data = request.getParameter(param1);

Si esta es la API del servlet , los parámetros ya han sido decodificados. No es necesario un manejo adicional de la codificación porcentual.

No he usado HttpClient, pero asegúrese de que esté enviando la codificación en el encabezado:

Content-type: application/x-www-form-urlencoded; charset=UTF-8

O, si debe, establezca la codificación conocida antes de cualquier llamada a getParameter :

request.setCharacterEncoding("UTF-8");