En Java, je dois utiliser HTTP Post pour envoyer une demande au serveur, mais si dans le paramètre de l'URL contient un caractère spécial, il renvoie ci-dessous Exception
Java.lang.IllegalArgumentException: URLDecoder: caractères hexadécimaux illégaux dans le modèle d'échappement (%) - Pour la chaîne d'entrée: "& '"
Le code pour envoyer des données
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);
Et côté serveur, j'utilise le code ci-dessous pour lire les informations
String data = request.getParameter(param1);
if (data != null) {
actionArg = new ChannelArg(URLDecoder.decode(data, "UTF-8"));
}
Le code fonctionne correctement mais si j'entre un caractère spécial tel que [a あ あ # $% & '(<>? /., あ あ あ あ あ], il lèvera une exception. Je me demande si quelqu'un pourrait m'aider à obtenir un indice pour pouvoir encoder et décoder des caractères spéciaux?
Merci beaucoup d'avance.
Malheureusement, l'encodeur d'URL ne résoudra pas votre problème. J'ai eu ce problème et j'ai utilisé un utilitaire personnalisé. Je me souviens de ce que j'ai obtenu sur Google;).
Pour encoder du texte pour un passage sûr à travers les internets:
import Java.net.*;
...
try {
encodedValue= URLEncoder.encode(rawValue, "UTF-8");
} catch (UnsupportedEncodingException uee) { }
Et pour décoder:
try {
decodedValue = URLDecoder.decode(rawValue, "UTF-8");
} catch (UnsupportedEncodingException uee) { }
String data = request.getParameter(param1);
S'il s'agit de servlet API , les paramètres ont déjà été décodés. Aucune autre manipulation du codage en pourcentage n'est nécessaire.
Je n'ai pas utilisé HttpClient, mais assurez-vous qu'il envoie le codage dans l'en-tête:
Content-type: application/x-www-form-urlencoded; charset=UTF-8
Ou, si vous le devez, définissez le codage connu avant tout appel à getParameter
:
request.setCharacterEncoding("UTF-8");
essayez la goyave
utilisez com.google.common.net.UrlEscapers
ça marche bien avec le chinois
comme ça:
Escaper escaper = UrlEscapers.urlFragmentEscaper();
String result = escaper.escape(yoururl);