Bonjour,
J'ai un problème lors du passage des paramètres à un JSP (appel via javascript -XMLHttpRequest-) les accents sont remplacés par un point d'interrogation.
Remarques :
1) Tout est défini en UTF-8 dans mon application :
*Dans chaque JSP :
1 2 3 4 5
| <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
%> |
*UTF-8 est définit dans Server.xml et Web.xml
2) Je fais bien un "escape" en javascript sur les parametres avant d'envoyer l'URL.
3) Dans le jsp de reception, si j'affiche la queryString :
request.getQueryString();
il semble que l'url soit bien encodée (les espaces sont remplacés par %20, les accents par %E9, etc.)
Exemple : si je passe la valeur "Comptabilité", la QueryString renvoyée est "Service=Comptabilit%E9"
4) Quand je fais un
request.getParameter("Service");
la page me retourne "Comptabilit?".
Par contre, si la valeur du paramètre "Service" est "service communication", request.getParameter("Service") me retourne
bien "service communication" (donc les %20 sont bien décodés).
5) J'ai essayé de faire un
URLDecoder.decode(request.getParameter("Service"),"UTF-8");
Ca me retourne "Comptabilit?"
Voici le Code javascript qui fait appel à à la JSP :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
function Afficher()
{
var Service = document.getElementById("Cb_Services");
var SearchBy = document.getElementById("Cb_SearchBy");
var SearchField = document.getElementById("SearchField");
if(SearchBy.value!='Aucun')
{
if(SearchField.value.length==0)
{
//Si recherche mais que champ vide ->ne sert à rien d'afficher quelque chose
alert('Champ vide');
return;
}
}
var OAjax;
if (window.XMLHttpRequest) OAjax = new XMLHttpRequest();
else if (window.ActiveXObject) OAjax = new ActiveXObject('Microsoft.XMLHTTP');
OAjax.open("POST",'ajax_Fiches.jsp?Service='+escape(Service.value)+'&SearchBy='+escape(SearchBy.value)+'&SearchField='+escape(SearchField.value),true);
OAjax.onreadystatechange = function()
{
if (OAjax.readyState == 4 && OAjax.status==200)
{
if (document.getElementById)
{
document.getElementById('content').innerHTML=OAjax.responseText;
}
}
}
OAjax.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
OAjax.send(null);
} |
EDIT
En fouillant le net, j'ai peut être trouvé un début d'explication :
il semblerait que pour le "é" :
- %E9 est le code ISO-8859-1
- le code UTF-8 est %C3%A9
Or, ici le code récupéré dans la jsp est %E9. Serait-ce la méthode "Open" dans le code javascript qui envoit en ISO-8859-1 au lieu de UTF-8 ?
Dans ce cas, comment changer ?
Quelqu'un aurait-il une idée ? J'avoue que je suis bloqué là...
Grand merci d'avance.
Lars
Partager