web-dev-qa-db-fra.com

Problème d'encodage de caractères avec Tomcat

Il y a un codage étrange des caractères. J'utilise JSP (JSTL) et Struts avec Tomat 6.

J'ai mon page JSP encodée comme telle:

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>

Le problème est lorsque j'essaie de transmettre l'URL en utilisant encodeURI en tant que tel:

<script type="text/javascript">
          $('#mailer_filter').change(function(){
            var val = $(this).val();
            console.log(val);
            console.log(escape(val));
            console.log(encodeURI(val));
            location.href = 'mailList.a?' + encodeURI($(this).val());
          });
        </script>

le paramètre sur l'action (fin Java) se présente comme suit:

Gaz Métro

cependant, à l'avant, il est affiché comme suit:

Gaz Métro

qui est la bonne façon. Que puis-je faire à ce sujet ??

16
OakvilleWork

Faites suivant

1) Code HTML

 <meta contentType="text/html; charset="UTF-8"/>

2) Configuration du navigateur pour IE Affichage - Encodage - Unicode (UTF-8)

3) Tomcat Server server.xml - Dans la balise Connector, l'attribut "URIEncoding" a été ajouté comme

<Connector port="8080" protocol="HTTP/1.1" 
           connectionTimeout="20000" 
           redirectPort="8443" URIEncoding="UTF-8"/>

catalina.sh/catalina.bat - ajouté après

set Java_OPTS=--Xms256m -Xmx1024m -Xss268k -server -XX:MaxPermSize=256m -XX:-UseGCOverheadLimit -Djava.awt.headless=true -Djavax.servlet.request.encoding=UTF-8 -Dfile.encoding=UTF-8

set CATALINA_OPTS=-Dfile.encoding="UTF-8"

4) Le type de réponse MIME doit être "application/x-www-form-urlencoded"

18
Rahul Agrawal

Avez-vous suivi ces étapes?

http://wiki.Apache.org/Tomcat/FAQ/CharacterEncoding#Q8

Copié ci-dessous:

Utiliser UTF-8 comme encodage de caractères pour tout est une valeur sûre. Cela devrait fonctionner pour à peu près toutes les situations.

Afin de passer complètement à l’utilisation d’UTF-8, vous devez apporter les modifications suivantes:

  1. Définissez URIEncoding = "UTF-8" sur votre fichier in server.xml. Références: connecteur HTTP, connecteur AJP.

  2. Utilisez un filtre de codage de caractères avec le codage par défaut défini sur UTF-8

  3. Modifiez tous vos JSP pour inclure le nom du jeu de caractères dans leur contentType.

    Par exemple, utilisez <%@page contentType="text/html; charset=UTF-8" %> Pour les pages JSP habituelles et <jsp:directive.page contentType="text/html; charset=UTF-8" /> Pour les pages en syntaxe XML (alias Documents JSP).

  4. Modifiez toutes vos servlets pour définir le type de contenu des réponses et pour inclure le nom du jeu de caractères dans le type de contenu en UTF-8.

    Utilisez response.setContentType("text/html; charset=UTF-8") ou response.setCharacterEncoding("UTF-8").

  5. Modifiez les bibliothèques de génération de contenu que vous utilisez (Velocity, Freemarker, etc.) pour utiliser UTF-8 et pour spécifier UTF-8 dans le type de contenu des réponses qu'elles génèrent.

  6. Désactivez toutes les vannes ou filtres susceptibles de lire les paramètres de demande avant que votre filtre de codage de caractères ou votre page jsp ait la possibilité de définir le codage sur UTF-8. Pour plus d'informations, voir http://www.mail-archive.com/[email protected]/msg21117.html .

11
Paul Grime

Essayez de définir le paramètre URIEncoding de votre connecteur Tomcat (dans le server.xml) sur UTF-8:

Par exemple.:

<Connector port="8080" maxHttpHeaderSize="8192"
           maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
           enableLookups="false" redirectPort="8443" acceptCount="100"
           connectionTimeout="20000" disableUploadTimeout="true"
           URIEncoding="UTF-8"/>
2
csupnig