2011-01-30 8 views
16

En Java, je dois utiliser HTTP Post pour envoyer une demande au serveur, mais si dans le paramètre de l'URL contient un certain caractère spécial, il jette ci-dessous ExceptionURL Encode et Decode caractère spécial en Java

java. lang.IllegalArgumentException: URLDecoder: motif caractères hexadécimaux illégaux dans évasion (en%) - pour 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 du côté du serveur, j'utiliser 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 je entrée un certain caractère spécial comme [un あ あ # $% & « (<>? /., Will あ あ あ あ], il va lancer une exception. Je me demande si quelqu'un pourrait m'aider à être en mesure d'encoder et de décoder les caractères spéciaux?

Merci beaucoup d'avance.

Répondre

5

encodeur Malheureusement url ne résoudra pas votre problème. J'ai eu ce problème et utilisé un utilitaire personnalisé. Je me souviens de ce que j'ai obtenu de googling;).

http://www.javapractices.com/topic/TopicAction.do?Id=96

+3

J'ai supervisé une meilleures solutions. Nos amis d'apache ont StringEscapeUtils (org.apache.commons.lang.StringEscapeUtils). Veuillez le vérifier si cela fonctionne. –

7

Pour encoder du texte pour le passage en toute sécurité à travers les internets:

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

Et Décodage:

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

Merci Steven, mais comme vous pouvez le voir dans mon code, j'utiliser UrlEncodedFormEntity (params, "UTF-8") sur le site client pour encoder mes données d'objet et côté serveur, j'ai utilisé URLDecoder.decode (data, "UTF-8") pour décoder. Cela a fonctionné correctement avec les caractères japonais mais le problème est apparu seulement quand j'ai entré un caractère comme [# $% & '(<>? /.,] –

+0

merci cela a fonctionné comme prévu hehehe: D – gumuruh

3
String data = request.getParameter(param1); 

Dans ce servlet API, les paramètres ont déjà été décodé. Aucune autre manipulation du codage en pourcentage n'est nécessaire.


Je ne l'ai pas utilisé HttpClient, mais assurez-vous qu'il envoie l'encodage dans l'en-tête:

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

Ou, si vous devez, définir l'encodage connu avant tout getParameter appels:

request.setCharacterEncoding("UTF-8"); 
+0

La définition de ce type de contenu a fonctionné pour moi. –

+0

C'est de l'or! Merci beaucoup – jiantongc

1

essayer goyave

utilisation com.google.common.net.UrlEscapers

il fonctionne très bien avec le chinois

comme ceci:

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