2012-03-22 20 views
7

Tomcat no codifica correctamente los literales de cadena que contienen caracteres Unicode. El problema ocurre en un servidor Linux pero no en mi máquina de desarrollo (Windows). Afecta SOLAMENTE a los literales de cadena (¡no a las cadenas leídas desde la base de datos o desde el archivo!).Cómo utilizar UTF-8 con tomcat

  • He configurado el URIEncoding="utf-8" en la etiqueta del conector (server.xml).
  • He utilizado setCharacterEncoding().
  • He revisado el seguimiento de la pila (no hay filtros que puedan establecer la codificación).
  • yo he dado la variable de entorno LANG
  • I cheched las cabeceras HTTP y son correctos (Content-Type = text/plain; charset = UTF-8)
  • he comprobado la codificación en el navegador y es correcto (UTF-8)

Nada de lo anterior funciona. ¿Alguna idea sobre lo que me podría estar perdiendo?

public class Test extends HttpServlet { 

@Override 
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 

    resp.setCharacterEncoding("utf-8"); 
    resp.setContentType("text/plain;"); 

    Writer w = resp.getWriter(); 
    w.write("Μαλακία Latin"); //Some unicode characters 
    w.close(); 
} 

Lo anterior muestra esto en el navegador. ii »Î» Î · νικά América

+2

Asegúrate de que el archivo de origen java tenga un conjunto de codificación utf-8. Uso Notepad ++ para verificar esto. Abra el archivo y verifique el menú "Codificación". Si la codificación no es UTF, corte todo el contenido del archivo fuente, cambie la codificación, pegue los contenidos del portapapeles y guarde el archivo fuente. –

+0

Si ve la respuesta del servidor en un editor hexadecimal, ¿cuál es la secuencia de bytes actual devuelta? ¿Cuál es la codificación de su archivo fuente? – Mikaveli

+0

* "El problema ocurre en un servidor Linux pero no en mi máquina de desarrollo (Windows)." * ¿Cómo se está implementando en Linux? ¿Estás transfiriendo archivos uno por uno? ¿Si es así, cómo? Por FTP? Si es así, ¿estás transfiriéndote en modo binario? – BalusC

Respuesta

4

Puede forzar la codificación de archivos cuando javac los lee al pasar -encoding 'utf-8' o -encoding 'iso-8859-1' durante la compilación. Solo asegúrate de que coincida con la codificación en la que tus archivos .java están realmente codificados.

http://docs.oracle.com/javase/6/docs/technotes/tools/windows/javac.html

codificación que codifica establecer el archivo de fuente nombre de codificación, tales como EUC-JP y UTF-8. Si no se especifica -codificación, se utiliza el convertidor predeterminado de la plataforma.

+0

esto, o use secuencias de escape unicode en su código java en lugar de caracteres. – jtahlborn

3

Pruebe a establecer la propiedad del sistema, por ejemplo file.encoding -Dfile.encoding=utf-8 en la línea de comandos de JVM de Linux

+0

Estás muy cerca. Necesitaba agregar esto cuando ejecutaba javac. Lo que me confundió es que HICE ejecutar javac sin esta opción y funcionó bien. Sin embargo, cuando hormiga llamaba javac, probablemente estaba configurando otra codificación predeterminada. – idrosid

+0

Esto me solucionó un problema donde mi .jsp incluía un fragmento de archivo HTML codificado en UTF-8. Al agregar este parámetro, el archivo se cargó correctamente. – JBCP

+0

Más opciones están dentro de http: // stackoverflow.com/questions/11342884/change-tomcats-charset-defaultcharset-in-windows –