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