2012-06-18 29 views
9

He intentado resolver este problema durante aproximadamente 7 horas.Problema de codificación de caracteres con Tomcat

hay una extraña codificación de caracteres. Estoy utilizando JSP (JSTL) y puntales con Tomat 6.

tengo mi página JSP codificación como tal:

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

El problema es cuando trato de pasar el URL usando encodeURI como tal:

<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> 

el parámetro de la acción (extremo java) sale como: Gaz MÃ © tro sin embargo

en el extremo delantero se muestra como: G az metro

que es la forma correcta (Gaz Métro) ...

alguna idea de lo que pueda hacer esto ??

+2

¿Dónde se ve el valor de el final de Java? En el archivo de registro? Si es así, es posible que el editor que está utilizando para leer el archivo de registro no espere UTF-8 ... – atk

Respuesta

1

Pruebe a establecer el parámetro URIEncoding de su conector Tomcat (en el server.xml) a UTF-8:

ej .:

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

gracias por la sugerencia ... Lo intenté antes de publicar, no resolvió el problema. – OakvilleWork

+0

Esto no tiene nada que ver con la codificación de salida. Solo afectará valores leídos de un cliente, y solo para valores de parámetros GET. –

6

¿Ha seguido estos pasos?

http://wiki.apache.org/tomcat/FAQ/CharacterEncoding#Q8

Copiado a continuación:

con UTF-8 como codificación de caracteres para todo lo que es una apuesta segura. Esto debería funcionar para prácticamente cualquier situación.

Con el fin de cambiar por completo al uso de UTF-8, es necesario realizar los siguientes cambios:

  1. Conjunto URIEncoding = "UTF-8" en su en server.xml. Referencias: HTTP Connector, AJP Connector.

  2. utilizar un filtro de codificación de caracteres con la codificación predeterminada se establece en UTF-8

  3. Cambiar todas las JSP de incluir el nombre conjunto de caracteres en su contentType.

    Por ejemplo, use <%@page contentType="text/html; charset=UTF-8" %> para las páginas JSP habituales y <jsp:directive.page contentType="text/html; charset=UTF-8" /> para las páginas en sintaxis XML (también conocidas como documentos JSP).

  4. Cambie todos sus servlets para establecer el tipo de contenido para las respuestas e incluir el nombre del conjunto de caracteres en el tipo de contenido para que sea UTF-8.

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

  5. Cambie cualquier biblioteca de generación de contenido que use (Velocity, Freemarker, etc.) para usar UTF-8 y especifique UTF-8 en el tipo de contenido de las respuestas que generan.

  6. Desactive cualquier válvula o filtro que pueda leer los parámetros de solicitud antes de que su filtro de codificación de caracteres o página jsp tenga la oportunidad de establecer la codificación en UTF-8. Para obtener más información, consulte http://www.mail-archive.com/[email protected]/msg21117.html.

+0

muchas gracias Paul ... He intentado todo lo anterior ... todavía no tuve suerte, he estado tratando de encontrar una solución, ¡incluso he visto soluciones sugeridas para codificar UTF-8 manualmente! Aunque no quiero usar esta opción ... básicamente esta publicación es similar a mi problema: http://stackoverflow.com/questions/6213377/handle-french-characters-in-java Sin embargo, esas sugerencias no t trabajo tampoco. – OakvilleWork

+0

He visto ** 6 ** responsable de esto 'en la naturaleza', utilizando WebSphere Portal Server. Intente y rastree cada solicitud, y si * cualquier * intenta leer un parámetro de solicitud antes de establecer la codificación correcta, entonces el valor se leerá como ISO8859-1 (si no recuerdo mal, esto se especifica en la especificación del servlet). –

10

hacer después

1) Código HTML

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

2) Configuración del navegador para IE Ver - Codificación - Unicode (UTF-8)

3) Tomcat Servidor server.xml - En la etiqueta del conector se agregó el atributo "URIEncoding" como

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

catalina.sh/catalina.bat - añade lo siguiente

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) tipo MIME de la respuesta debe ser "application/x-www-form-urlencoded"

+0

He estado buscando un día para resolver este problema. Todo funcionó bien en Jetty, pero cuando se implementó en tomcat mis diéresis se estaban perdiendo. ¡Gracias! – Will

Cuestiones relacionadas