2011-01-30 38 views
16

In Java, ho bisogno di utilizzare HTTP Post per inviare la richiesta al server, ma se nel parametro del URL contiene alcuni caratteri speciali si getta sotto EccezioneURL e decodifica carattere speciale in Java

java. lang.IllegalArgumentException: URLDecoder: caratteri esadecimali illegali in fuga (%) pattern - per stringa di input: "& '"

Il codice per inviare i dati

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); 

E al lato server, io uso il codice qui sotto per leggere le informazioni

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

Il codice funziona correttamente, ma se ho ingresso alcuni caratteri speciali come [a あ あ # $% & '(<>? /., あ あ あ あ あ], genererà un'eccezione. Mi chiedo se qualcuno potrebbe aiutarmi qualche suggerimento per essere in grado di codificare e decodificare caratteri speciali?

Grazie mille in anticipo.

risposta

5

encoder Purtroppo url non risolverà il problema. Ho avuto questo problema e ho usato un'utility personalizzata. Ricordo che ho preso da googling;).

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

+3

Ho supervisionato una soluzione migliore. I nostri amici di apache hanno StringEscapeUtils (org.apache.commons.lang.StringEscapeUtils). Si prega di controllare se funziona. –

7

per codificare il testo per il passaggio sicuro attraverso le internet:

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

e decodificare:

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

Grazie Steven, ma come si può vedere nel mio codice, io uso UrlEncodedFormEntity (params, "UTF-8") sul sito del client per codificare i miei dati oggetto e sul lato server, ho usato URLDecoder.decode (dati, "UTF-8") per decodificare. Ha funzionato correttamente con i caratteri giapponesi, ma il problema si è verificato solo quando ho inserito caratteri come [# $% & '(<>? /.,] –

+0

grazie ha funzionato come previsto hehehe: D – gumuruh

3
String data = request.getParameter(param1); 

Se questo è il servlet API, sono già stati decodificati i parametri. Non è necessaria alcuna ulteriore gestione della codifica percentuale.


Non ho usato HttpClient, ma assicurarsi che sta inviando la codifica nell'intestazione:

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

Oppure, se è necessario, impostare la codifica noto prima di qualsiasi getParameter chiamate:

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

L'impostazione di questo tipo di contenuto ha funzionato per me. –

+0

Questo è oro! molte grazie – jiantongc

1

prova guava

uso com.google.common.net.UrlEscapers

funziona bene con il cinese

come questo:

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