IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Servlets/JSP Java Discussion :

Appel Jsp depuis Javascript : problèmes d'accents


Sujet :

Servlets/JSP Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2006
    Messages : 25
    Points : 11
    Points
    11
    Par défaut Appel Jsp depuis Javascript : problèmes d'accents
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    URLDecoder.decode(request.getParameter("Service"),"UTF-8");
    Ca me retourne "Comptabilit?"

    Voici le Code javascript qui fait appel à à la JSP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    J'ai le même problème. As-tu trouvé une solution? Quelqu'un aurait-il quelque chose à proposer? Sinon, il me semble qu'il serait plus adéquat de déplacer ce sujet dans la section Servlet/JSP. J'en appel aux administrateurs pour cela.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2006
    Messages : 25
    Points : 11
    Points
    11
    Par défaut Solution
    Hello,

    Je suis retourné voir dans le code. Alors voilà comment j'ai fait (à ajouter dans ton javascript) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    /************ Gestion UTF-8 ************/
    /***************************************/
    function utf8(wide) {
      var c, s;
      var enc = "";
      var i = 0;
      while(i<wide.length) {
        c= wide.charCodeAt(i++);
        // handle UTF-16 surrogates
        if (c>=0xDC00 && c<0xE000) continue;
        if (c>=0xD800 && c<0xDC00) {
          if (i>=wide.length) continue;
          s= wide.charCodeAt(i++);
          if (s<0xDC00 || c>=0xDE00) continue;
          c= ((c-0xD800)<<10)+(s-0xDC00)+0x10000;
        }
        // output value
        if (c<0x80) enc += String.fromCharCode(c);
        else if (c<0x800) enc += String.fromCharCode(0xC0+(c>>6),0x80+(c&0x3F));
        else if (c<0x10000) enc += String.fromCharCode(0xE0+(c>>12),0x80+(c>>6&0x3F),0x80+(c&0x3F));
        else enc += String.fromCharCode(0xF0+(c>>18),0x80+(c>>12&0x3F),0x80+(c>>6&0x3F),0x80+(c&0x3F));
      }
      return enc;
    }
     
    var hexchars = "0123456789ABCDEF";
     
    function toHex(n) {
      return hexchars.charAt(n>>4)+hexchars.charAt(n & 0xF);
    }
     
    var okURIchars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-";
     
    function encodeURIComponentNew(s) {
      var s = utf8(s);
      var c;
      var enc = "";
      for (var i= 0; i<s.length; i++) {
        if (okURIchars.indexOf(s.charAt(i))==-1)
          enc += "%"+toHex(s.charCodeAt(i));
        else
          enc += s.charAt(i);
      }
      return enc;
    }
    Puis, lors de l'appel à ta jsp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var url='ajax_Fiches.jsp?Service='+encodeURIComponent(Service.value)+'&SearchBy='+encodeURIComponent(SearchBy.value)+'&SearchField='+encodeURIComponent(SearchField.value);
    Puis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    OAjax.open("POST",url,true);
    Normalement ça devrait rouler

    @+

    Guillaume

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    waooooooouh ! J'hallucine

    J'utilise AJAX avec des pages configurées en UTF-8 et je n'ai jamais eu besoin de tout ce truc... Tu as dû rater quelque chose...

    Essaye avec ce contentType
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    httpRequest.open("POST", "./aideChamp", true);
    httpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    ...
    A+

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2009
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    Désolé de faire revivre un post vieux de 2 ans mais j'ai un problème très similaire à celui de Lars à l'exception que mon appel au Jsp ne se fait pas avec javascript/ajax mais plutôt avec un simple lien html (ouvrir dans une autre page) et une balise img (thumbnail) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <a href="/ImageloadingServlet?filename=URI-d'une-image-avec-parfois-des-accents">
    <img src="/ImageloadingServlet?filename=URI-d'une-image-avec-parfois-des-accents&width=150&height=150" />
    </a>
    Je ne sais donc pas comment je peux spécifier le content-type de la Request pour qu'il convertisse bien mon "é" une fois dans le jsp comme le fait la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    Quand je fais getQuerystring(), j'ai la valeur %E9 et quand je fait un getParameter("filename") le caractère en question devient un ?.

    Merci à l'avance pour votre aide !

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/05/2014, 13h38
  2. Appel fonction depuis javascript
    Par Michelk12 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 10/11/2011, 11h34
  3. Appel JSP depuis Bean
    Par osmoz dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 02/11/2006, 14h21
  4. Liveconnect avec Opera 8.5 (appel Java depuis JavaScript)
    Par Gregory3000 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/10/2005, 08h32
  5. Comment appeler une fonction JavaScript depuis Delphi ?
    Par Alfred12 dans le forum Web & réseau
    Réponses: 4
    Dernier message: 17/06/2005, 18h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo