Anexo - La marca de orden de bytes (BOM)



La marca de orden de bytes (del inglés byte order mark o BOM) es un carácter Unicode que se utiliza para indicar el orden de los bytes (endianness) de un fichero de texto. Su código es U+FEFF. Además de usarse para indicar el orden de los bytes, también se puede utilizar como marca para indicar qué codificación Unicode se está utilizando (UTF-8, UTF-16 o UTF-32).



Generalmente el BOM es una secuencia difícilmente visible en la mayoría de las codificaciones convencionales u otras codificaciones Unicode (normalmente con el aspecto de una secuencia indescifrable de códigos de control). Aun cuando un BOM se interprete erróneamente como un carácter real contenido en el texto no podrá ser visto debido al hecho de que es un espacio no-separable de anchura-cero (en inglés zero-width no-break space). La semántica zero-width no-break space del carácter U+FEFF se ha marcado en desuso con la versión Unicode 3.2, que únicamente permite su uso con la semántica BOM.

En UTF-16, un BOM se expresa mediante una secuencia de dos bytes al principio de la cadena codificada para indicar el orden de escritura que emplean los caracteres que la siguen, siendo ésta: FE FF si emplean el orden big-endian (escritura secuencial en el orden natural de lectura) o FF FE si emplean el orden little-endian (al contrario). En ningún caso el valor U+FFFE puede ser un carácter Unicode y este hecho permite que se pueda emplear para detectar el orden de los bytes de la cadena, en contraste con U+FEFF que sí es un carácter.

Mientras que el UTF-8 no está relacionado con ninguna problemática de orden de bytes un BOM codificado en UTF-8 puede ser empleado para etiquetar el texto como UTF-8. Muchas aplicaciones del entorno Windows (incluyendo Windows Notepad) añaden un BOM a sus ficheros UTF-8. Sin embargo en los sistemas tipo Unix (que hacen uso exhaustivo de ficheros de texto para configuración) no se recomienda esta práctica, pues puede interferir con el correcto procesado de códigos importantes, tales como el hash-bang al principio de la interpretación de un script.

También podría interferir con el código fuente de aquellos lenguajes de programación que no lo reconozcan. Por ejemplo, gcc informa de los caracteres perdidos al comienzo del fichero fuente, y en PHP 5, cuando el output buffering está desactivado, tiene el sutil efecto de hacer que la página comience de inmediato a ser enviada al navegador, evitando que las cabeceras (custom headers) puedan ser especificadas por el script PHP. La representación UTF-8 del BOM es la secuencia de bytes EF BB BF, que aparece como los caracteres ISO-8859-1 "" en los editores de textos y navegadores no configurados para manejar UTF-8.

Aunque un BOM puede ser empleado con UTF-32, esta codificación casi nunca se usa en la práctica para ningún tipo de transmisión