2013-05-13 8 views
27

Ho visto molte domande come la mia ma non una singola risposta ... Ecco la cosa: voglio ottenere i miei parametri dalla richiesta (caratteri con accenti) ma non funziona . Ho provato ad usare l'utente request.setCharacterEncoding("UTF-8") ma non ha funzionato neanche.HttpServletRequest UTF-8 Encoding

So che URLDecoder.decode(request.getQueryString(), "UTF-8") restituisce i caratteri dei diritti ma request.getParameterValues() non funziona! Qualcuno ha un'idea?

Grazie

risposta

34

suggerimento di Paul sembra il miglior modo di agire, ma se si sta andando a lavorare intorno ad esso, non è necessario URLEncoder o URLDecoder affatto:

String item = request.getParameter("param"); 

byte[] bytes = item.getBytes(StandardCharsets.ISO_8859_1); 
item = new String(bytes, StandardCharsets.UTF_8); 

// Java 6: 
// byte[] bytes = item.getBytes("ISO-8859-1"); 
// item = new String(bytes, "UTF-8"); 

Aggiornamento: Poiché questo è ottenendo molti voti, voglio sottolineare il punto di BalusC che questa non è sicuramente una soluzione; è una soluzione al meglio. Le persone non dovrebbero farlo.

Non so esattamente cosa abbia causato il problema originale, ma sospetto che l'URL fosse già codificato in UTF-8 e che quindi sia stato codificato UTF-8 nuovamente.

+9

Per tutti i futuri lettori, si noti che questa è una soluzione alternativa, non una soluzione. In effetti, è estremamente terribile e rende la tua webapp fragile e non vendibile. – BalusC

+0

Hai ragione, grazie per avermelo fatto notare! Aiutato anche nel mio problema – Broccoli

15

Se si utilizza Apache Tomcat, request.setCharacterEncoding("UTF-8") funziona solo con POST richiesta.

Per GET richiesta, è necessario aggiungere URIEncoding="UTF-8" sul <Connector> in server.xml.

Scopri di più su FAQ/CharacterEncoding - Tomcat Wiki.

+0

Informazioni su WebSphere Application Server? Posso sapere che il server.xml si trova in quale cartella in WAS? Cerco il tutto, ho scoperto che c'è molto server.xml. –

+0

Con WebSphere, è necessario utilizzare la proprietà di sistema 'client.encoding.override'. Vedere https://www.ibm.com/support/knowledgecenter/en/ssw_i5_54/rzatz/51/admin/help/trun_svr_utf.html –

5

Beh, ho trovato un modo per risolvere il mio problema, immagino che non è la soluzione migliore, ma lo fa lavori ..

String item = request.getParameterValues("param"); // Hélène 
    item = URLEncoder.encode(model.getNameItem(), "ISO-8859-1"); // H%C3%A9l%C3%A8ne 
    item = URLDecoder.decode(item, "UTF-8"); // and finally : Hélène 

Se può aiutare qualcun altro, io sono felice di aiutare:)

PS: Paul, non ti ho risposto prima ma ho già fatto quelle cose. Grazie comunque per il tuo aiuto.

+0

Da Paul answer, posso sapere che il server.xml si trova in quale cartella in WAS? Cerco il tutto, ho scoperto che c'è molto server.xml. –

+0

Ha funzionato per me, thx. Non è stato possibile modificare il server Tomcat, quindi è perfetto :) –