jueves, 14 de noviembre de 2013

Configurar la codificación de caracteres UTF-8 en JAVA y BD MySQL por defecto

El envío de parámetros a través de cliente-servidor es una parte esencial que generalmente se incluye de manera implícita  en el proceso de alguna solicitud hecha por el usuario, es decir todo ocurre de manera transparente, sin que el usuario se preocupe por los datos que son claves para llevar a cabo la solicitud, entonces el servidor devuelve la respuesta pero, ¿Qué ocurre si al visualizar esa respuesta nos encontramos con un montón de caracteres extraños  niño,  jesús, jamás? ¿Seguro a más de uno les ha representado un dolor de cabeza?

Al enviarse un documento de tipo texto (text/html, text/plain, etc.)  al servidor  también se envía información adjunta al encabezado del HTTP en el campo Content-Type  que contiene el tipo de formato de datos que se está enviando y que especifica la codificación de caracteres del documento.

Es muy importante etiquetar siempre los documentos web en forma explícita. HTTP 1.1 dice que el charset predeterminado es ISO-8859-1. Sin embargo, existen demasiados documentos sin etiquetar en otras codificaciones. Por lo tanto, los exploradores utilizan la codificación preferida del lector cuando no exista ningún parámetro charset explícito.

Por lo general, la línea del encabezado de HTTP se ve de la siguiente manera:
Content-Type: text/html; charset=utf-8

En teoría, se puede utilizar toda codificación de caracteres que haya sido registrada por la Autoridad de Asignación de Cifras en Internet (IANA).Cuanto más extenso sea el uso de una codificación de caracteres, mayor será la probabilidad de que el explorador la comprenda. La codificación Unicode, como UTF-8, es una buena opción debido a varios motivos.

Para configurar correctamente  la codificación de caracteres UTF-8, puedes hacer lo siguiente:

1.-Incluir la directiva page y el Content-Type en el head del cuerpo HTML de la siguiente manera:





2.-Agregar el siguiente el método setCharacterEncoding(“UTF-8”) en tu código java ya sea en Servlet o en JSP, dependiendo donde recibas los parámetros:

*Nota: este método reemplaza  la codificación de caracteres usada en el cuerpo de esta solicitud. Este método debe ser llamado antes de la lectura de parámetros de la petición o la lectura de entrada. De lo contrario, no tiene ningún efecto.
Ejemplo 1:






Ejemplo2:


Configurar MySQL en UTF8 por defecto

Con esto garantizamos que la base de datos MySQL  esté configurada en UTF-8 por defecto para no tener problemas con caracteres multilenguaje.
Si utilizas Ubuntu:

 

Localizar el fichero my.cnf este fichero se encuentra normalmente en la ruta /etc/mysql/my.cnf, modificaremos las siguientes líneas en la sección [mysqld]:

skip-character-set-client-handshake
collation_server=utf8_unicode_ci
character_set_server=utf8


Para los que están en Windows y utilizan WAMPSERVER pueden encontrarlo como se indica a continuación:


Y copian las líneas anteriores en la sección correspondiente de la siguiente manera:



Después pedimos un status en la consola del MySQL:



Referencias electrónicas