- Marca de orden de bytes (BOM)
-
En Unicode, una Marca de orden de bytes o (BOM, por el inglés Byte Order Mark) es el carácter Unicode U+FEFF en code point (espacio no-separable de anchura-cero, en inglés zero-width no-break space), cuando este carácter se emplea para marcar el endianness (la orientación de escritura del flujo de bytes) de una cadena de caracteres UCS/Unicode con código en UTF-16 o UTF-32 y/o como marca para indicar que el texto está codificado en UTF-8, UTF-16 o UTF-32.
Generalmente el BOM es una secuencia difícilmente visible en la mayoría de las codificaciones convencionales u otras codificaciones Unicode (normalmente con el aspecto de una secuencia indescifrable de códigos de control). Aun cuando un BOM se interprete erróneamente como un carácter real contenido en el texto no podrá ser visto debido al hecho de que es un zero-width no-break space. La semántica zero-width no-break space del carácter U+FEFF se ha devaluado con la version Unicode 3.2, que únicamente permite su uso con la semántica BOM [cita requerida].
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). 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 el 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 Windows (incluyendo Windows Notepad) 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 hash-bang al principio de la interpretación de un script [cita requerida]. 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, y en PHP, 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 la mayoría de 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].
Representaciones de las marcas de orden de bytes para cada codificación
Encoding Representation UTF-8 EF BB BF UTF-16 Big Endian FE FF UTF-16 Little Endian FF FE UTF-32 Big Endian 00 00 FE FF UTF-32 Little Endian FF FE 00 00 UTF-7 2B 2F 76, y una de las siguientes secuencias de bytes: [ 38 | 39 | 2B | 2F ] UTF-1 F7 64 4C UTF-EBCDIC DD 73 66 73 SCSU 0E FE FF BOCU-1 FB EE 28 seguido opcionalmente por FF Véase también
Enlaces externos
- The Unicode Standard, chapter 13 (PDF) (ver 13.6 — Specials)
- FAQ — UTF and BOM
Wikimedia foundation. 2010.