En Unicode, la marca de orden de bytes o BOM(11s) (del inglés byte order mark) es un dato que indica el uso de una codificación Unicode, así como el orden de los bytes. Generalmente se encuentra al principio de algunos archivos de texto.[1]
Técnicamente,[2] es un carácter Unicode cuyo punto de código es U+FEFF (espacio sin salto de línea de ancho cero o zero-width no-break space en inglés), el cual se utiliza para marcar cuál es la posición de mayor o menor valor (endianness)[3] de una cadena del Conjunto de Caracteres Universal ISO/IEC 10646 (en inglés Universal Character Set o UCS) o Unicode ya sea en UTF-16 o UTF-32 y/o como un marcador para indicar que el texto está codificado en UTF-8, UTF-16 o UTF-32. El término oficial para este carácter en la versión francesa de ISO/IEC 10646 (que es la contraparte de Unicode ISO) es marca de orden de bytes (BOM).
Cuando se interpreta correctamente, el usuario final del texto codificado no ve el BOM. Sin embargo, hay dos casos donde este carácter puede ser mal interpretado:

La marca de orden de bytes de la mayoría de las codificaciones Unicode es una secuencia de pocos bytes que puede aparecer como una secuencia inusual de caracteres si el software que se usa para leer el texto está mal configurado o como un espacio si el software que se usa para leer el texto no reconoce este indicador.[4]
Si una marca de orden de bytes se interpreta erróneamente como un carácter dentro del texto, será invisible porque es un espacio sin interrupción de ancho cero (es decir, un zero-width no-break space). El uso del carácter U+FEFF como un espacio sin interrupción de ancho cero, (es decir, como un espacio duro) se ha vuelto obsoleto en la versión Unicode 3.2, la cual proporciona el carácter U+2060 como alternativa para este uso específico.[5] Por lo tanto, este carácter debe usarse solo como una marca de orden de bytes.
FEFF;ZERO WIDTH NO-BREAK SPACE;Zs;0;ON;;;;;N;BYTE ORDER MARK;;;;
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).[13] 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 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 Bloc de notas) 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 shebang al principio de la interpretación de un script.[14] 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,[cita requerida] 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.[cita requerida]
Codificación | Representación (hexadecimal) |
Representaçión (decimal) |
Representación (ISO-8859-1) |
---|---|---|---|
UTF-8[13] | EF BB BF
|
239 187 191
|

|
UTF-16 (big-endian)[13] |
FE FF
|
254 255
|
þÿ
|
UTF-16 (little-endian)[13] |
FF FE
|
255 254
|
ÿþ
|
UTF-32 (big-endian)[13] |
00 00 FE FF
|
0 0 254 255
|
□□þÿ (□ es el carácter nulo en ASCII) |
UTF-32 (little-endian)[13] |
FF FE 00 00
|
255 254 0 0
|
ÿþ□□ (□ es el carácter nulo en ASCII) |
UTF-7 | 2B 2F 76 , y uno de los siguientes bytes: [ 38 | 39 | 2B | 2F ]
|
43 47 118 , y uno de los siguientes bytes: [ 56 | 57 | 43 | 47 ]
|
+/v , y uno de los siguientes bytes: 8 9 + /
|
UTF-1 | F7 64 4C
|
247 100 76
|
÷dL
|
UTF-EBCDIC | DD 73 66 73
|
221 115 102 115
|
Ýsfs
|
SCSU | 0E FE FF
|
14 254 255
|
□þÿ (□ es el carácter de cambio de mayúsculas en ASCII)
|
BOCU-1 | FB EE 28 opcionalmente seguido de FF
|
251 238 40 opcionalmente seguido de 255
|
ûî( opcionalmente seguido de ÿ
|
GB 18030 | 84 31 95 33
|
132 49 149 51
|
□1■3 (□ y ■ son caracteres no asignados en ISO-8859-1)
|