UTF-8 encoding en Websphere Application Server

Escenario

Una aplicación Web J2EE ejecutandose en un cluster WAS 6.0 (WebSphere Application Server) en un cliente nuestro.

El problema

La aplicación recoge datos en un formulario web y los guarda en una BD. Pero los caracteres especiales del español tal como las letras acentuadas (ñ, á, é, etc) eran insertados como basura en la BD.

Solución

Revisamos los parámetros de la JVM del servidor de aplicaciones y notamos que por default viene configurada para usar ISO-8859-1 sobre-escribiendo el charset encoding que viene desde cliente. La propiedad es:

-Dclient.encoding.override=ISO-8859-1

Entonces, cambiamos el parámetro para obligar a la JVM a usar UTF-8 y listo, se solucionó el problema.

Los pasos que seguimos para hacer el cambio desde la consola de administración del WAS 6.0 fueron:

  1. Seleccionar “Applications Servers”
  2. Seleccionar “Java and Process Management” (dentro de la seccion Server Infrastructure) –> “Process Definition”
  3. Seleccionar “Java Virtual Machine” (dentro de la seccion Additional Properties)
  4. Seleccionar “Add data in Generic JVM arguments” (seguramente viene seteado como -Dclient.encoding.override=ISO-8859-1)
  5. Presionar “Save”.
  6. Reniciar el servidor de aplicaciones.

UTF-8

Unicode es un estándar industrial que consiste en un repertorio de más de 100.000 caracteres que permite representar y manipular texto escrito en la mayoría de los lenguajes existentes.

UTF-8 (8-bit UCS/Unicode Transformation Format) es un formato de tamaño variable para representar los caracteres Unicode, y que al ser compatible con el antiguo ASCII es el protocolo de encoding preferido por muchas aplicaciones como clientes de mail, y páginas web.

En esto radicaba nuestro problema, el browser enviaba al servidor de aplicaciones la petición HTTP (REQUEST) usando UTF-8 como character encoding, sin embargo en el servidor estaba seteada la sytem property (-Dclient.encoding.override) que manda a sobre-escribir el mecanismo de encoding del cliente, usando ISO-8859-1, por tanto las tablas de interpretación y transformación usadas eran diferentes y el servidor interpretaba de forma incorrecta los array de bytes en formato UTF-8 enviando representaciones de caracteres estraños a la Base de Datos.

Tim Bray explica porque Unicode y UTF-8 son excelentes, es una lectura obligatoria para entender de estos temas.

3 comentarios en “UTF-8 encoding en Websphere Application Server

Agregar un comentario

Su dirección de correo no se hará público. Los campos requeridos están marcados *