BOM: ¿qué es una byte order mark?

Toda la información que se envía por Internet requiere estar en un orden concreto. El receptor de los datos (una página HTML, por ejemplo) debe saber cómo leer los datos y, para garantizar que así sea, se añaden distintas marcas o señales al código. Una de ellas es la marca de orden de bytes o byte order mark (BOM). ¿Qué es BOM y para qué sirve?

¿Para qué sirve la marca de orden de bytes?

Hay muchas maneras de codificar caracteres. Mientras que hoy en día la más utilizada es UTF-8, antes la codificación más popular era UTF-16, que también sigue usándose a menudo. Otro formato que también se utiliza a veces es el UTF-32. Al contrario que con UTF-8, las codificaciones con un mayor número de bits por carácter requieren que se determine el orden de los bytes.

La codificación UTF-8 permite representar cada carácter con un solo byte (o sea, 8 bits). UTF-16, en cambio, necesita dos bytes para ello (16 bits), de manera que, para que estos puedan interpretarse correctamente, debe indicarse si se leerán de derecha a izquierda o al revés. Según sea el caso, los datos pueden resultar en valores completamente distintos.

  • De izquierda a derecha, 01101010 00110101 equivale, en notación hexadecimal, a 6a35.
  • De derecha a izquierda, 01101010 00110101 equivale, en notación hexadecimal, a 356a

Si observásemos esta serie de cifras en una tabla Unicode, veríamos que se trata de caracteres totalmente diferentes. El primer tipo de lectura es denominado Big Endian (BE) y el segundo, Little Endian (LE). La razón es que en Big Endian se da primero el valor más alto y, en Little Endian, el más bajo.

Hecho

En nuestro día a día, solemos encontrar más la notación tipo Big Endian, pero se trata tan solo de una convención. Los ordenadores pueden operar con ambas, por lo que es importante señalar cuál se ha escogido.

Para indicar en qué dirección deben leerse los bytes se necesita la BOM, un carácter invisible que, por ello, también es llamado “zero width no-break space”. Se trata, por lo tanto, de un espacio cuya longitud es cero y que no provoca un salto de línea. En UTF-16, este carácter (hexadecimal) puede ser feff (BE) o fffe (LE). La marca se coloca delante de la codificación propiamente dicha.

UTF-8 no requiere la BOM, aunque esta marca también suele aparecer en textos codificados en este formato. En este caso, puede tratarse o bien de un olvido a la hora de convertir UTF-16 o UTF-32 a UTF-8, o bien de una añadidura de un editor automático. De todos modos, aunque no es necesaria, la byte order mark no suele molestar en UTF-8, ya que no se muestra.

Problemas con la byte order mark

Los problemas surgen cuando el sistema receptor no sabe cómo interpretar la BOM. Algunas versiones de PHP y varios entornos de Unix no prevén el carácter, lo que puede dar lugar, por ejemplo, a fallos a la hora de mostrar una página web.

También puede haber problemas entre HTTP y HTML: una cabecera HTTP contiene ya de por sí información relativa a la codificación procedente de la configuración del servidor. Si se ha creado un documento HTML con BOM, pero la cabecera HTTP proporciona al navegador una orden distinta, pueden ocurrir de nuevo fallos en la presentación de la página. Sin embargo, gracias a un cambio realizado en la especificación de HTML5, esto ya no debería pasar, porque se estableció que la BOM ubicada al comienzo de la codificación tuviera prioridad sobre las órdenes de la cabecera HTTP. Puede suceder, no obstante, que versiones anteriores del navegador aún no hayan implementado la nueva especificación.

Cómo quitar la BOM

Para eliminar la byte order mark de un código fuente, hace falta un editor de texto plano que ofrezca dicha opción. No hay más que introducir el archivo con la BOM en el software y volver a guardarlo sin BOM: de esta manera, se cambia la codificación y ya no debería aparecer esta marca. Por ejemplo, en el popular editor de texto Notepad++, se puede cambiar la codificación y guardar directamente el archivo, ya sin marca.

Nota

En versiones anteriores de Notepad++, aún aparece la opción de “Convertir a UTF-8 sin BOM”, lo cual equivale, en versiones más recientes, a “Convertir a UTF-8”. Para realizar la conversión incluyendo la BOM, la opción actual sería “Convertir a UTF-8-BOM”.

¿Le ha resultado útil este artículo?
Page top