Toda la in­fo­r­ma­ció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 ga­ra­n­ti­zar 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 ca­ra­c­te­res. Mientras que hoy en día la más utilizada es UTF-8, antes la co­di­fi­ca­ció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 co­di­fi­ca­cio­nes con un mayor número de bits por carácter requieren que se determine el orden de los bytes.

La co­di­fi­ca­ción UTF-8 permite re­pre­se­n­tar 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 in­te­r­pre­tar­se co­rre­c­ta­me­n­te, 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 co­m­ple­ta­me­n­te distintos.

  • De izquierda a derecha, 01101010 00110101 equivale, en notación he­xa­de­ci­mal, a 6a35.
  • De derecha a izquierda, 01101010 00110101 equivale, en notación he­xa­de­ci­mal, a 356a

Si ob­se­r­vá­se­mos esta serie de cifras en una tabla Unicode, veríamos que se trata de ca­ra­c­te­res to­ta­l­me­n­te di­fe­re­n­tes. El primer tipo de lectura es de­no­mi­na­do 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 co­n­ve­n­ción. Los or­de­na­do­res pueden operar con ambas, por lo que es im­po­r­ta­n­te 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 (he­xa­de­ci­mal) puede ser feff (BE) o fffe (LE). La marca se coloca delante de la co­di­fi­ca­ción pro­pia­me­n­te dicha.

UTF-8 no requiere la BOM, aunque esta marca también suele aparecer en textos co­di­fi­ca­dos 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 au­to­má­ti­co. 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 in­te­r­pre­tar 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í in­fo­r­ma­ción relativa a la co­di­fi­ca­ción pro­ce­de­n­te de la co­n­fi­gu­ra­ción del servidor. Si se ha creado un documento HTML con BOM, pero la cabecera HTTP pro­po­r­cio­na al navegador una orden distinta, pueden ocurrir de nuevo fallos en la pre­se­n­ta­ción de la página. Sin embargo, gracias a un cambio realizado en la es­pe­ci­fi­ca­ción de HTML5, esto ya no debería pasar, porque se es­ta­ble­ció que la BOM ubicada al comienzo de la co­di­fi­ca­ción tuviera prioridad sobre las órdenes de la cabecera HTTP. Puede suceder, no obstante, que versiones an­te­rio­res del navegador aún no hayan im­ple­me­n­ta­do la nueva es­pe­ci­fi­ca­ció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 in­tro­du­cir el archivo con la BOM en el software y volver a guardarlo sin BOM: de esta manera, se cambia la co­di­fi­ca­ción y ya no debería aparecer esta marca. Por ejemplo, en el popular editor de texto Notepad++, se puede cambiar la co­di­fi­ca­ción y guardar di­re­c­ta­me­n­te el archivo, ya sin marca.

Nota

En versiones an­te­rio­res 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 co­n­ve­r­sión in­clu­ye­n­do la BOM, la opción actual sería “Convertir a UTF-8-BOM”.

Ir al menú principal