Problemas de visualización provocados por BOM en UTF-8

Al usar las páginas codificadas UTF-8 en algunos agentes de usuarios, aparece una línea adicional o caracteres no deseados en la parte superior de mi página web o archivo incluido. ¿Cómo se eliminan?

Respuesta

Si está trabajando con un archivo codificado en UTF-8, es posible que sus problemas de visualización se deban a la presencia de una firma UTF-8 (BOM) que el agente de usuario no reconoce. This used to be a problem for static HTML files, but is no longer in recent versions of major browsers. However, if you use PHP to generate your HTML, this was still an issue with PHP version 5.3.6.

La BOM siempre se encuentra al principio del archivo, y por lo tanto, habitualmente puede esperarse ver los problemas de visualización en la parte superior de una página. Sin embargo, es posible que también encuentre líneas en blanco dentro de la página, si incluye un texto de otro archivo que comience con una firma UTF-8.

Este artículo le ayudará a determinar si la UTF-8 está provocando el problema. Si no hay ninguna evidencia de una firma UTF-8 al principio del archivo, deberá buscar la solución en alguna otra parte.

¿Qué es una firma UTF-8 (BOM)?

Algunas aplicaciones introducen una combinación de bytes en particular al principio de un archivo, para indicar que el texto incluido en el archivo es Unicode. Esta combinación de bytes se conoce como firma o marca de orden de bytes (Byte Order Mark, BOM). Algunas aplicaciones, como un editor de texto o un explorador, muestran la BOM como una línea adicional en el archivo, en tanto que otros muestran caracteres inesperados, como .

Consulte el panel lateral para obtener información más detallada acerca de la BOM.

La BOM es el punto de codificación de Unicode U+FEFF, que corresponde al carácter de Unicode 'SIN ANCHO NI ESPACIO' (ZERO WIDTH NON-BREAKING SPACE', ZWNBSP).

En las codificaciones UTF-16 y UTF-32, salvo que exista algún indicador alternativo, la BOM es esencial para asegurar una interpretación correcta del contenido del archivo. Cada carácter del archivo está representado por 2 o 4 bytes de datos y el orden en el que se almacenan estos bytes en el archivo es importante; la BOM indica este orden.

En la codificación UTF-8, la presencia de una BOM no es fundamental, debido a que, a diferencia de las codificaciones UTF-16 o UTF-32, no existe ninguna secuencia de bytes alternativa en un carácter. Sin embargo, la BOM aún puede aparecer en texto de codificación UTF-8, ya sea como producto secundario de una conversión de una codificación o debido a que fue agregada por un editor.

Detección de la BOM

Primero, necesitamos verificar si efectivamente existe una BOM al principio del archivo.

Puede intentar encontrar una BOM en su contenido, pero si su editor trabaja correctamente con la firma UTF-8, es probable que no pueda verla. Un editor que no trabaja correctamente con la firma UTF-8 muestra los bytes que componen esa firma de acuerdo con su propia configuración de codificación de caracteres. (Con la codificación de caracteres Latin 1 (ISO 8859-1), la firma aparece como caracteres .) Con un editor binario capaz de mostrar los valores de bytes hexadecimales en el archivo, la firma UTF-8 aparece como EF BB BF.

Alternativamente, es posible que su editor le informe en una barra de estado o un menú en qué codificación se encuentra su archivo, incluida información acerca de la presencia o no de la firma UTF-8.

Si esto no ocurre, puede ayudarle algún tipo de prueba basada en sistemas de escritura (ver a continuación). (Tenga en cuenta, si se trata de un archivo incluido por PHP o algún otro mecanismo que usted considere que está provocando el problema, escriba el URI del archivoincluido).

Eliminación de la BOM

Si tiene un editor que muestre los caracteres que componen la firma UTF-8 es posible que pueda eliminarlos manualmente. Sin embargo, lo más posible es que la BOM esté allí en primer lugar porque usted no la vio.

Verifique si su editor le permite especificar si una firma UTF-8 se agrega o almacena al guardar. Este tipo de editor proporciona una forma de eliminar la firma simplemente leyendo el archivo y luego guardándola afuera nuevamente. Por ejemplo, si Dreamweaver detecta una BOM, el cuadro de diálogo Guardar como tendrá una marca de verificación junto al texto "Incluir firma Unicode (BOM)". Simplemente destilde el casillero y guarde.

Una de las ventajas de usar un sistema de escritura es que puede eliminar la firma rápidamente y de varios archivos. De hecho, el sistema de escritura puede ejecutarse automáticamente como parte de su proceso. Si usa Perl, puede emplear un sistema de escritura simple creado por Martin Dürst.

Nota: Debe verificar cómo afecta al proceso la eliminación de la firma. Puede suceder que parte del proceso de desarrollo de su contenido se base en el uso de la firma para indicar que un archivo está en UTF-8. Recuerde también que las páginas con una alta proporción de caracteres del latín pueden verse correctas superficialmente, pero quizás los caracteres ocasionales que se encuentran fuera del rango ASCII (U+0000 a U+007F) están codificados incorrectamente.

A propósito

Podrá ver que algunos editores de texto, como Windows Notepad agregarán automáticamente una firma UTF-8 a cualquier archivo que guarde como UTF-8.

Una firma UTF-8 al principio de un archivo CSS en ocasiones puede hacer que las reglas iniciales del archivo presenten error con determinados agentes de usuarios.

En algunos exploradores, la presencia de una firma UTF-8 hará que el explorador interprete el texto como UTF-8 independientemente de cualquier declaración de codificaciones que indiquen lo contrario.