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.
Lamentablemente el codificador de url no resolverá su problema. Tuve este problema y utilicé una utilidad personalizada. Recuerdo esto que obtuve de googlear;).
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");