# Lenguaje XHTML/Codificación de caracteres

El código fuente de un documento XHTML contiene el código XHTML necesario para que el navegador interprete y renderize la estructura del documento. La fuente del documento es texto plano y ese texto, se lo haya planteado alguna vez o no, sigue una determinada codificación de caracteres, que no tiene porqué ser la misma (y lo mas seguro es que no lo sea) que la codificación de caracteres que utilizan aquellos que utilizan lenguajes como el chino, el hebreo o el árabe.

## Definir la codificación del documento

Quizás alguna vez se haya encontrado con una página web que presenta caracteres extraños. ¿No?. Pues si quiere puede hacer una prueba, con esta página mismo. En su navegador encontrará una opción para seleccionar la codificación de caracteres que usa la página web que está usted viendo. En la mayoría de navegadores podrá seleccionar una codificación en el Menú Ver → Codificación. Adelante, cámbiela por otro tipo de codificación (es posible que la que tenga seleccionada sea UTF-8 o iso-8859-1, también conocida como Latin-1, Europeo Occidental o Western).
Una vez la haya cambiado, recargue la página de su navegador si el navegador no lo hace por sí sólo, y observe el resultado. Pruebe varias codificaciones si es necesario. Si quiere dejarlo como estaba bastaría con seleccionar la Codificación Automática o bien una de las mencionadas arriba (pruebe la que funcione).
Ahora ya sabe lo que puede hacer para intentar ver en condiciones una página web cuyo creador olvidó especificar la codificación de caracteres utilizada para crear la página web.

### Elegir codificación

Continuará

### Procedimiento

En la primera línea de texto que escriba en el documento, antes de la Declaración del Tipo de Documento, debe escribir la siguiente línea, donde se especifica la versión de XML que utiliza para interpretar los elementos y la codificación del código fuente, aunque sólo es necesario para aquellos documentos que no están codificados en UTF-8 o UTF-16:
Y dentro del elemento head también debe añadir el siguiente campo de metainformación:
Hay otra opción que es la Cabecera HTTP que envía el servidor antes de que recibamos el documento HTML, y es la que nos indica qué tipo de documento (MIME) nos va a enviar (un documento HTML, una imagen PNG, etc) y en qué codificación. Tenga en cuenta que la codificación en la cabecera HTTP es prioritaria respecto a las demás declaraciones de codificación, por lo que tendrá que ponerse de acuerdo con el administrador de su servidor en caso de que necesite cambiarla. Aunque como podrá ver más adelante, puede sustituir los caracteres que no pertenezcan al juego de caracteres declarado por una codificación de los mismos que le proporciona el XHTML.
Tenga en cuenta que si está visualizando un documento HTML que no ha sido servido por un servidor web (por ejemplo, lo visualiza desde su disco duro) no contendrá información de cabecera HTTP, por lo que debe asegurarse de incluir también la codificación en el propio documento.

## Caracteres de escape

¿Qué pasaría si habiendo especificado una codificación de caracteres queremos utilizar puntualmente caracteres ajenos al juego de caracteres especificado? ¿Y si no podemos especificar la codificación de caracteres por restricciones en la página (contenido generado dinámicamente)? O algo más común: ¿Y si quiero representar en un documento HTML código del propio lenguaje HTML? Pues hay una solucón para ese problema: el empleo de referencias numéricas de carácter o entidades de carácter.

### Referencias numéricas de carácter

Las Referencias numéricas de carácter (NCR, Numeric Character Reference, en inglés) es el código que identifica el carácter dentro del conjunto de caracteres que incluye a todos los demás, el Unicode, no en la codificación que tengamos definida en ese momento. La codificación se puede hacer por su código decimal o bien hexadecimal.
El escape de caracteres por referencias numéricas de carácter se implementa escribiendo el código entre un carácter de ampersand y almohadilla (&#) y un punto y coma (;). Si el código es en hexadecimal el código empezará por una equis minúscula (x). El valor en hexadecimal es insensible a mayúsculas y minúsculas.
Por ejemplo:

### Entidades de carácter

Son un alias de las referencias numéricas de carácter y están definidas en el propio lenguaje de marcado (XHTML), por lo que su disponibilidad está sujeta a las diferentes versiones del lenguaje. Son códigos mucho más fáciles de recordar que un simple código numérico.
El escape de caracteres por medio de entidades de carácter se implementa poniendo el código entre un carácter de ampersand (&) y un punto y coma (;). Y atención porque es sensible a mayúsculas y minúsculas.
Como ejemplo:

### Ejemplos de entidades de carácter

No pretendemos poner aquí todas las entidades de carácter. Usted mismo puede encontrarlas en la especificación del XHTML que esté utilizando, es decir, en la DTD correspondiente.
Si utiliza la especificación XHTML 1.0 Transitional, si edita la DTD correspondiente (es un archivo de texto con extensión dtd) econtrará el siguiente fragmento:
Editamos el archivo xhtml-lat1.ent (se encuentra en el mismo nivel del dominio que la DTD) y encontraremos la traducción entre entidades y referencias numéricas. Lo mismo para las otras referencias que encontramos en la DTD.
Entidades que seguro utilizará más a menudo:
| Entidad | Referencia numérica | Descripción |
| nbsp | #160 | Espacio de no-separación |

## Referencias

* Especificar la codificación en un documento (en inglés)
* Juegos de caracteres y codificaciones en XHTML, HTML y CSS (en inglés)
* Lista de codificaciones de caracteres registrados por IANA (texto plano, en inglés)
* FAQ: Using character entities and NCRs (en inglés)