Marcador de secuencia de bytes

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 16 de abril de 2021; las comprobaciones requieren 4 ediciones .

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.

Uso

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.

Determinación de la codificación por marcador de secuencia de bytes

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
  1. 1 2 3 4 5 6 7 En estas codificaciones, la secuencia no determina exactamente el orden de los bytes , ya que la codificación es de un byte, pero esta secuencia se puede usar para determinar el método de codificación. [2] [3]
  2. En UTF-7, debido al uso de base-64, el cuarto byte del BOM está 001111xxen representación binaria, donde xxdepende del siguiente carácter (el primero después del BOM). Por lo tanto, el cuarto byte no solo es parte de la lista de materiales, sino que también contiene información sobre el siguiente carácter (no de la lista de materiales). Para xx=00, 01, 10, 11, el cuarto byte será respectivamente , 38, 39o 2Bcuando esté 2Fcodificado en base64. Si el siguiente carácter no está codificado en base64, se usa 38como el cuarto byte y el siguiente byte es 2D.
  3. SCSU proporciona otras codificaciones para U+FEFF, la secuencia especificada se recomienda en UTR #6. [cuatro]

Dificultades a tener en cuenta al utilizar el

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.

Notas

  1. La marca de orden de bytes (BOM) en HTML  . www.w3.org. Consultado el 19 de septiembre de 2018. Archivado desde el original el 17 de agosto de 2018.
  2. Preguntas frecuentes: UTF-8, UTF-16, UTF-32 y BOM: ¿Puede un flujo de datos UTF-8 contener el carácter BOM (en formato UTF-8)? En caso afirmativo, ¿puedo suponer que los bytes UTF-8 restantes están en orden big-endian? . Consultado el 4 de enero de 2009. Archivado desde el original el 1 de septiembre de 2012.
  3. STD 63: UTF-8, una transformación de ISO 10646 Archivado el 25 de octubre de 2011 en Wayback Machine Byte Order Mark (BOM)
  4. UTR #6: Secuencia de bytes de firma para SCSU . Consultado el 18 de octubre de 2011. Archivado desde el original el 6 de octubre de 2011.
  5. Posibles problemas con la lista de materiales UTF-8 . Consultado el 3 de mayo de 2017. Archivado desde el original el 13 de junio de 2017.