El marcador de secuencia de bytes o marca de orden de bytes ( Marca de orden de bytes en inglés , BOM ) es un carácter especial del estándar Unicode insertado al principio de un archivo de texto o flujo para indicar que Unicode se usa en el archivo (flujo), así como para indican indirectamente la codificación y el orden de bytes por el que se codificaron los caracteres Unicode. El número Unicode para este carácter es U+FEFF. El uso de este carácter, según la especificación Unicode, es opcional, pero es muy utilizado, ya que facilita evitar la decodificación incorrecta de información textual.
De acuerdo con la especificación Unicode, un marcador solo puede aparecer al comienzo de un archivo o secuencia. Si U+FEFFaparece un carácter en medio de un flujo de datos, debe interpretarse como un "espacio de ancho cero que no se rompe" (esencialmente un carácter que no se puede mostrar y que no cambia nada). Sin embargo, la mayoría[ cuanto? ] Los navegadores que no sean Opera versiones 12 e inferiores tratan la lista de materiales en el medio del documento como un carácter que ocupa una línea completa y luego generan un salto de línea [1] .
Para un espacio de ancho cero que no se rompe en Unicode, también hay un carácter especial separado - U+2060, que se recomienda usar como tal, y se U+FEFFrecomienda usar el marcador de secuencia de bytes solo para el propósito previsto.
Si el formato de representación de caracteres Unicode se conoce exactamente de antemano por el programa receptor, entonces de acuerdo con el estándar Unicode, el marcador no debe establecerse. Y si el formato se declara de otra manera (por ejemplo, MIME en el campo de encabezado Content-Type), se supone que el marcador no debe establecerse de acuerdo con el estándar.
Por la forma en que se codifica el marcador de secuencia de bytes al comienzo de un archivo o secuencia, se puede determinar fácilmente la codificación y el orden de bytes utilizados para codificar los caracteres Unicode en ese archivo o secuencia. Esta circunstancia fue la razón principal del uso generalizado del marcador de secuencia de bytes.
Codificación | Representación de marcador de secuencia de bytes | Representación del marcador en caso de decodificación errónea con una codificación diferente | |||||
---|---|---|---|---|---|---|---|
código hexadecimal | codigo decimal | ISO-8859-1 | KOI8-R | CP1251 | CP866 | comentario | |
UTF-8 [t1] | EF BB BF | 239 187 191 |  | О╩© | п»ї | я╗┐ | |
UTF-16 ( ser ) | FE FF | 254 255 | þÿ | ЧЪ | юя | ■ | brecha - no rompible |
UTF-16 ( LE ) | FF FE | 255 254 | ÿþ | ЪЧ | яю | ■ | |
UTF-32 (BE) | 00 00 FE FF | 0 0 254 255 | ␀␀þÿ | ␀␀ЧЪ | ␀␀юя | ␀␀■ | ␀ - NUL , espacio - sin interrupción |
UTF-32 (LE) | FF FE 00 00 | 255 254 0 0 | ÿþ␀␀ | ЪЧ␀␀ | яю␀␀ | ■␀␀ | |
UTF-7 [t1] | 2B 2F 76 38 2B 2F 76 39 2B 2F 76 2B 2B 2F 76 2F[t2] |
43 47 118 56 43 47 118 57 43 47 118 43 43 47 118 47 |
+/v8 +/v9 +/v+ +/v/ | ||||
UTF-1 [t1] | F7 64 4C | 247 100 76 | ÷dL | ||||
UTF-EBCDIC [t 1] | DD 73 66 73 | 221 115 102 115 | Ýsfs | ||||
SCSU [t1] | 0E FE FF[t3] | 14 254 255 | ␎þÿ | ␎■ | ␎ - ej. Símbolo de desplazamiento hacia fuera, el espacio no se rompe | ||
BOCU-1 [t1] | FB EE 28 | 251 238 40 | ûî | √ю( | |||
GB-18030 [t1] | 84 31 95 33 | 132 49 149 51 | �1�3 | Д1Х3 | � — códigos sin valores |
Hay casos en los que debe evitarse el uso de un marcador de secuencia de bytes a pesar de su conveniencia. Por ejemplo, el uso de un marcador en las plantillas web hace que aparezcan líneas en blanco en el documento, por lo que es una buena idea eliminar el marcador de las secuencias de comandos web y los archivos CSS . Y la presencia de un marcador al comienzo de los archivos PHP (antes de la etiqueta <?php) hace que se envíe una cadena vacía al cliente antes de que el código haya comenzado a ejecutarse, lo que provoca una falla en los casos en que se debe enviar un encabezado HTTP inmediatamente a el cliente (al redirigir una solicitud, por ejemplo). [5] También puede procesar incorrectamente json_decode si json se escribe en un archivo con BOM.