Centro de Información

Byte Order Mark (BOM)

La Unicode Byte Order Mark o la marca de orden de bytes de Unicode es un carácter de Unicode, que muestra la endianness de un archivo o flujo (stream) de Unicode. Este carácter tiene la posición Unicode U+FEFF y también se puede utilizar para determinar la codificación de un archivo de texto. El carácter siempre aparece primero en el archivo y no se interpreta como parte del texto por el software que admite el formato correspondiente. Una ventaja de esta técnica es que no se debe proporcionar información adicional y la clave para la interpretación se encuentra directamente en el archivo.

Byte Order Mark de diferentes Codificaciones

Dependiendo de la codificación, una secuencia de bytes diferente resulta del carácter U-FEFF. Las secuencias de bytes de las codificaciones más populares se resumen en esta tabla:

Codificación
Byte Order MarkASCII
ANSINo BOM-
UTF-72B 2F 76 ( 38 | 39 | 2B | 2F )+/v 89+/
UTF-8EF BB BF
UTF-16 Big EndianFE FFþÿ
UTF-16 Little EndianFF FEÿþ
UTF-32 Big Endian00 00 FE FF??þÿ
UTF-32 Little EndianFF FE 00 00ÿþ??

La última columna (ASCII) muestra cómo se vería la secuencia de bytes de la marca de orden de bytes si se interpretara como caracteres ASCII en un editor de texto.

Para poder leer un archivo en las codificaciones UTF-16 o UTF-32 una marca de orden de bytes es absolutamente necesaria porque un carácter en estas codificaciones ocupa varios bytes y la marca de orden de bytes indica el orden en que deben interpretarse los bytes (ver Big Endian y Little Endian con respecto a la orden de bytes). Por otro lado, en UTF-8 y UTF-7, la marca de orden de bytes no es obligatoria, pero sin embargo conduce a mejores resultados, ya que los programas de otra manera también podrían interpretar tales textos como ANSI.

Puede ver fácilmente que la marca de orden de bytes indica el orden de los bytes, al comparar las secuencias de bytes entre Big Endian (el bit más significativo al principio) y Little Endian (el bit menos significativo al principio), porque estos dos códigos tienen una orden de byte opuesto. En UTF-16 Little Endian, la secuencia de bytes es FF FE y en UTF-16 Big Endian es todo lo contrario (FE FF). Como general en UTF-32, se usan cuatro bytes por carácter. Eso también es evidente, si nos fijamos en la marca de orden de bytes: 00 00 FE FF para UTF-32 Big Endian y FF FE 00 00 para UTF-32 Little Endian.

Interpretación de la Byte Order Mark

Los problemas y las falsas interpretaciones con respecto a la marca de orden de bytes ocurren si los programas no pueden interpretar la marca de orden de bytes y en su lugar muestran caracteres ANSI. Por ejemplo, se puede mostrar  para la marca de orden de bytes de UTF-8 (EF BB BF). Aquí es un poco problemático, porque los archivos ANSI también permiten la secuencia de bytes EF BB BF. Entonces, si almacena la cadena  al principio de un archivo y guarda este archivo como ANSI, la mayoría del software interpretará el resto del archivo como codificado en UTF-8. Con aplicaciones como el TextConverter o el TextEncoder, puede leer y escribir archivos con o sin Byte Order Mark y puede cambiar el formato Unicode de los archivos o si se usa una Byte Order Mark en los archivos o no.

Si el carácter U+FEFF aparece en otra posición que al principio de un archivo, se muestra como un signo con un ancho de 0 y sin interrupción. Sin embargo, el uso deliberado de esta marca es obsoleto para este propósito. U+FEFF se debe usar solo como una marca de orden de bytes y debe usar la posición de código U+2060 para un carácter sin ancho ni interrupción.

Cambiar, Eliminar o Agregar Byte Order Mark

Con el programa TextEncoder puede cambiar, eliminar o agregar la marca de orden de bytes de los archivos. Después de iniciar TextEncoder, puede hacer lo siguiente:

La lista de archivos en TextEncoder contiene una columna llamada "BOM". Aquí puede ver si sus archivos agregados tienen actualmente una marca de orden de bytes o no.