Je veux obtenir mes paramètres de la requête (caractères avec accents) mais cela ne fonctionne pas. J'ai essayé d'utiliser request.setCharacterEncoding( "UTF-8" )
mais cela n'a pas fonctionné non plus.
Je sais que URLDecoder.decode( request.getQueryString(), "UTF-8" )
me renvoie les caractères de droits mais request.getParameterValues()
ne fonctionne pas! Est-ce que quelqu'un a une idée ?
La suggestion de Paul semble être la meilleure solution, mais si vous voulez y remédier, vous n'avez pas du tout besoin d'URLEncoder ou d'URLDecoder:
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");
pdate: Étant donné que cela obtient beaucoup de votes, je tiens à souligner le point de BalusC que ce n'est certainement pas une solution; c'est au mieux une solution de contournement. Les gens ne devraient pas faire ça.
Je ne sais pas exactement ce qui a causé le problème d'origine, mais je soupçonne que l'URL était déjà encodée en UTF-8, puis a été encodée à nouveau en UTF-8.
Si vous utilisez Apache Tomcat, request.setCharacterEncoding("UTF-8")
ne fonctionne qu'avec la requête POST
.
Pour la demande GET
, vous devez ajouter URIEncoding="UTF-8"
Sur ton <Connector>
dans server.xml
.
Voir plus dans FAQ/CharacterEncoding - Espace wiki Apache Tomcat .
Eh bien, j'ai trouvé un moyen de résoudre mon problème, je suppose que ce n'est pas la meilleure solution, mais ça marche ..
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
Si cela peut aider quelqu'un d'autre, je suis heureux de vous aider :)
PS: Paul, je ne vous ai pas répondu plus tôt mais j'ai déjà fait ces choses. Merci quand même pour votre aide.