Las computadoras solamente entienden a los números. Lo que tu ves en la pantalla cómo letras o imágenes en realidad es información transmitida a través de internet con códigos numéricos que la computadora recibe en grupos de dígitos binarios (unos y ceros).
Para que la computadora pueda interpretar estos números, necesitamos definir una unidad mínima que sea capaz de transportar cierto tipo de información. Cuando estamos trabajando con texto cada letra es un «caracter». Esto es un concepto algo abstracto.
Luego necesitamos definir un juego de los caracteres que vamos a utilizar. Un charset es un juego de caracteres abstractos que ponemos a nuestra disposición. En el HTML, el juego de caracteres extándar es el ISO 10646, el cual es virtualmente lo mismo que Unicode. Es un conjunto de más de diez mil caracteres que representan la mayoría de los idiomas escritos en el planeta.
A la apariencia visual de un caracter se la conoce cómo glyph. Y a un conjunto de glyphs se le conocen cómo fuente. El glyph para la «A mayúscula» va a ser diferente para las demás letras.
Al principio de la era de la comunicación por las computadoras eran utilizados solamente muy pocos caracteres, que contenian solamente los caracteres necesario para cierto idioma. El juego de caracterés más conocido es el ASCII (ISO 646), el cual solo contiene 128 caracteres, 33 de los cuales no son imprimibles y son llamados «códigos de control». El jusgo de caracteres. La codificación es muy simple: por ejemplo para la «A mayúscula» es 65 (0x41), la cual se codifica cómo 65 (en binario 1000001).
¿Pero en que afecta todo esto a un creador de páginas web? Si utilizamos caracteres que están fuera del rango del código ASCII, la codificación se vuelve crucial. Si especificamos un jusgo de caracteres erroneo, la página se va a volver difícil o imposible de leer.
¿Cómo especificamos el juego de caracteres? La manera correcta es hacerlo a través de la propiedad del Header HTTP Content-Type:
Content-Type: text/html; charset=utf-8
Esto lo podemos hacer de varias formas, desde configurar nuestro servidor, por ejemplo en Apache lo hacemos desde el (httpd.conf) o con un archivo .htaccess. Pero si no tenemos acceso a nuestro servidor podemos hacerlo en cada uno de nustros documentos con PHP incluyendo al principio de nuestro archivo la siguiente línea para un juego de caracteres UTF-8:
header(\'Content-Type: text/html; charset=utf-8\');
Tambien podemos especificarlo con HTML simple con la siguiente etiqueta:
<meta http-equiv="Content-Type"
content="text/html; charset=utf-8">
Si usas esta etiqueta meta
el documento ignorará el HTTP header original.
No existe un juego de caracteres por defecto para el HTML por eso es necesario especificar uno.
En mi caso prefiero utlizar el UTF-8, que es compatible con la mayoría de los idiomas. Pero es recomendable investigar si el juego de caracteres que utilizas soporta el idioma que escribes.
Este post es para responder una de las preguntas de las 37 preguntas un desarrollador y diseñador web debe saber responder.