Configuración de una Aplicación Web en Tomcat con codificación UTF-8

Índice de Contenidos

      1. Internacionalización

      2. Problemas en la codificación de caracteres

      3. Soporte para codificación de caracteres en UTF-8

                 3.1 Configuración del cliente 3.2 Configuración del Tomcat

      4. Conclusión

1. Internacionalización

Muy a menudo nos encontramos con el problema de tener que traducir una aplicación web a un idioma que contiene caracteres diferentes al que se tenía actualmente definido. Si inicialmente no se contempló esta posibilidad ya que se pensó que nunca se debería traducir a otro idioma nos encontramos con un grave problema. Llegados a este punto y teniendo en cuenta que no podemos dar marcha atrás para volver a definir los requisitos iniciales, nos acarreará mucho tiempo y esfuerzo la modificación de todas las páginas para dotarlas de soporte internacional. Por todo esto es importante tener en cuenta desde el principio la codificación de caracteres que tendrá nuestra aplicación web.

Puedes leer más sobre internacionalización aquí

2. Problemas en la codificación de caracteres

La codificación de caracteres en una aplicación web es un tema que suele dar bastantes problemas a los desarrolladores ya que no está del todo claro qué formato hay que seguir y cuál es el que suelen utilizan los servidores web, bases de datos o navegadores web.

Cuando se recibe o envía texto a una página web, lo que en un principio parece algo muy simple en realidad no lo es tanto ya que para que ese texto sea interpretado y escrito en pantalla por el navegador web y manejado por el servidor web hasta llegar a la base de datos, en ocasiones “pasa por muchas manos”.

A menudo ocurre que se tiene configurado un formato de codificación de caracteres diferente en el navegador del cliente, otro para el servidor web y otro en la base de datos. Hay que tener especial cuidado con esto ya que si tenemos una aplicación web como la del ejemplo de abajo, si el cliente envía los caracteres en UTF-8, el servidor web los espera en ISO-8859-5 y en la base de datos deben guardarse como SQL_ASCII no hay forma de que la aplicación funcione correctamente.

3. Soporte para codificación de caracteres en UTF-8

UTF-8 es un estándar de codificación de longitud variable que utiliza caracteres Unicode y que soporta la mayoría de los lenguajes del mundo por lo que es muy recomendable. Con UTF-8 no tendremos que preocuparnos de escribir el código HTML de cada carácter especial (ñ,  vocales acentuadas …) como se hace algunas veces ya que se establece internamente una referencia entre el carácter introducido y su código de representación UTF-8.

Para dotar a nuestras páginas con soporte para codificación de caracteres en UTF-8 habrá que seguir los siguientes pasos:

3.1 Configuración del cliente

1. En la primera línea de cada JSP se debe indicar el encoding de la página a utilizar de manera que cuando se envía la petición por HTTP entre el cliente y el servidor, el navegador sepa en qué formato debe enviar los caracteres para que el servidor los procese correctamente.

3.2 Configuración del Tomcat

2. En la parte del servidor también tenemos que especificar el encoding a utilizar. En Tomcat por defecto se especifica el formato de codificación ISO-8859-1. Para cambiar la codificación tenemos que modificar el archivoserver.xml que se encuentra en DIRECTORIO_INSTALACION_TOMCAT\conf\server.xml.

Añadimos el atributo URIEncoding=“UTF-8” en la etiqueta <Connector port=8080” … /> ya que es aquí donde se configura el comportamiento que sigue Tomcat cuando recibe peticiones a través del puerto 8080.

3. Podría ser necesario especificar al contenedor de servlets Catalina la codificación a utilizar indicándole en el arranque que los caracteres siempre van en UTF-8. Para ello editamos el fichero catalina.bat (Windows) o elcatalina.sh (Linux) y añadimos lo siguiente:

A la vez indicamos las opciones del arranque de la JVM en UTF-8 por lo que añadimos al mismo fichero.

4. Por último debemos forzar a que la request soporte los caracteres en UTF-8 ya que cuando se envía la petición por post, el servidor Tomcat no es capaz de saber cuál es el formato de codificación del cliente. Como posible solución está crear un filtro para que todas las peticiones pasen por él y donde se especifica que la request vaya en codificación UTF-8.

Añadimos el filtro al web.xml antes de la declaración de cualquier servlet.

4. Conclusión

Como podéis ver la codificación de caracteres no es nada trivial y afecta en muchas partes de nuestra aplicación web por lo que es algo a tener muy en cuenta a la hora de planificar un proyecto. Para evitarnos muchos problemas sobre todo cuando tenemos mucho código escrito hay que tener muy presente que nuestras páginas web serán accedidas desde diferentes sitios con distintos idiomas. Todo esto queda resuelto eligiendo un estándar en la codificación de los caracteres, en este caso UTF-8.