Juego de caracteres y tipos de codificación (UTF-8...)

¿Qué es un juego de caracteres?

Un juego de caracteres es un conjunto bien definido de caracteres. El más simple es ASCII (lista de caracteres de base US). El más completo y moderno es Unicode.

¿Qué es una codificación de caracteres?

La codificación de un juego de caracteres especifica cómo se almacenan estos caracteres efectivamente en forma de octetos comprensibles por un ordenador. Para un juego de caracteres determinados, a menudo se debe elegir entre numerosas codificaciones diferentes, cada una con sus ventajas e inconvenientes.

Por ejemplo, mostramos 2 codificaciones muy utilizadas para el juego de caracteres Unicode:

  • UTF-8
    Para este los caracteres ASCII básicos se codifican en un octeto (8 bits). Los demás en varios. Las ventajas de este formato son principalmente que es compacto (si hay muchos caracteres ASCII básicos) y que se puede leer con facilidad con cualquier editor de texto.
  • UTF-16
    Para este todos los caracteres se codifican en 2 octetos (16 bits). Por tanto, es menos compacto que el UTF-8 para texto latino. Pero un programa informático gestionará más rápidamente esta codificación precisamente porque cada carácter ocupa exactamente 2 octetos (por ejemplo, es fácil calcular la longitud de una cadena de caracteres a partir del lugar que ocupa en la memoria).

¿Qué juego de caracteres y codificación debo elegir para mi sitio web?

Si puedes elegir, te recomendamos utilizar el juego de caracteres Unicode con la codificación UTF-8. Todos los navegadores gestionan bien esta codificación y permite gestionar todas las lenguas posibles (francés, inglés, japonés...).

Si tienes un sitio estático, debes asegurarte de que tus archivos HTML se guarden en UTF-8 (todos los editores modernos de texto lo permiten).

Si tienes un sitio dinámico que integra varias tecnologías (bases de datos, plantillas HTML, XML, lenguajes como PHP, Ruby, ASP...), te debes asegurar de que dominas por completo tu cadena de conversión de caracteres a través de cada bloque tecnológico. No siempre es fácil, pero es esencial para no tener caracteres corrompidos (garbage) fuera de la visualización final en el navegador.

¿Cómo aplicar este conjunto de caracteres a mi sitio web?

Imaginemos que has elegido el UTF-8 para tu sitio estático. Todos tus archivos HTML se han guardado en formato UTF-8, perfecto. Ahora la pregunta es: ¿cómo sabrá el navegador que interpretará el archivo HTML qué codificación se usa? Esta es la lógica que emplean la mayoría de navegadores:

  • El navegador va a mirar en primer lugar si el servidor web que le ha proporcionado la página le da la información del conjunto de caracteres. El servidor puede indicar esta información en el campo «Content-Type» de su respuesta HTTP (pero no es obligatorio).
    • text/html; charset=UTF-8: Aquí el servidor indica que es un archivo HTML codificado en UTF-8.
    • text/html: Aquí el servidor no proporciona información, el navegador deberá encontrar otro medio para obtenerlo.
  • De lo contrario el navegador mira si el mismo código HTML contiene la información de codificación. En efecto, un diseñador web puede dar esta información gracias a un meta tag como este:
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  • Si no, el navegador partirá del principio de que la codificación utilizada es la ISO-8859-1.

¿Cómo diagnosticar y resolver problemas del conjunto de caracteres?

Si la visualización de ciertos caracteres (principalmente acentuados) se corrompe en el navegador, ante todo no hay que intentar «entrometerse» y realizar una conversión arriesgada de caracteres. Esto podría agravar el problema. Por el contrario, hay que analizar por completo el problema para resolverlo adecuadamente:

  • Verifica tu plataforma web planteándote la pregunta para cada bloque «¿cuál es la codificación de entrada?» y «¿cuál es la codificación de salida?». De ser necesario, puedes utilizar funciones de conversión (iconv en PHP por ejemplo), únicamente si has identificado el problema claramente.
  • Verifica las etapas descritas en el apartado anterior para asegurarte de que tu servidor web y tu página HTML proporcionan la información correcta de tu codificación.
  • Si tu página web está en XHTML (es decir, que está en XML en realidad), entonces necesitas respetar las reglas del XML para indicar la codificación utilizada en tu página. Se efectúa normalmente en la primera línea del archivo xml:
    <?xml version="1.0" encoding="ISO-8859-1"?>
    Si no se indica ninguna codificación, un analizador HTML deducirá que se trata de UTF-8.
  • Verifica que tus archivos HTML, tus plantillas, tus archivos de localización o cadenas de caracteres hard-coded se han codificado correctamente.

Por supuesto, un análisis de tu página con Yakaferci te ayudará a detectar posibles problemas.

La herramienta gratuita de Yakaferci para analizar el conjunto de caracteres de tus páginas


Analizar gratis el conjunto de caracteres de tu página:
Analizar mi página


Para iniciar el análisis de Yakaferci, basta con introducir el enlace de tu página en el cuadro de arriba y pinchar en el botón Analizar. De este modo podrás acceder a las distintas páginas del informe, en especial la del conjunto de caracteres.

Para más información...

Si este artículo te ha despertado interés por documentarte más sobre el tema de los juegos de caracteres, aquí tienes algunos enlaces útiles:

También te pueden resultar útiles otros artículos de Yakaferci en la categoría Referencias y Técnica.