Compartir a través de


Uso de marcas de orden de bytes

Los archivos de texto Unicode se pueden codificar en varios formatos, incluidos UTF-8, UTF-16 y UTF-32. A cada uno de estos formatos se le puede añadir como prefijo una marca de orden de bytes (BOM) que indica el orden de bytes utilizado cuando se escribió el texto. Las marcas de orden de bytes disponibles se enumeran en la tabla siguiente. Para UTF-8, la marca de orden de bytes es opcional, ya que los bytes solo pueden estar en un orden. Para UTF-16 y UTF-32, se requiere la marca de orden de bytes porque esos formatos son sensibles al orden de bytes.

Nota:

Una marca de orden de bytes no es un carácter de control que selecciona el orden de bytes del texto.

 

Marca de orden de bytes Descripción
EF BB BF UTF-8
FF FE UTF-16, little endian
FE FF UTF-16, big endian
FF FE 00 00 UTF-32, little endian
00 00 FE FF UTF-32, big-endian

 

Nota:

Los productos heredados de Microsoft usan Windows-1252 o UCS-2 (fijo con UTF-16), orden de bytes little endian para "Unicode". Para las aplicaciones nuevas, se recomienda UTF-8.

 

Lo ideal es que todo el texto Unicode siga solo un conjunto de reglas de ordenación de bytes. Esto no es posible, sin embargo, porque los microprocesadores difieren en la ubicación del byte menos significativo. Los procesadores Intel y MIPS colocan primero el byte menos significativo, mientras que los procesadores Motorola (y todos los archivos Unicode con inversión de bytes) lo colocan en último lugar. Con solo un único conjunto de reglas de ordenación de bytes, los usuarios de un tipo de microprocesador se ven obligados a intercambiar el orden de bytes cada vez que se lee o escribe un archivo de texto sin formato, incluso si el archivo nunca se transfiere a otro sistema operativo basado en un microprocesador diferente.

El lugar preferido para especificar el orden de bytes es en un encabezado de archivo, pero los archivos de texto no tienen encabezados. Por lo tanto, Unicode ha definido un carácter (U+FEFF) y un no carácter (U+FFFE) como marcas de orden de bytes. Son imágenes de bytes duplicadas.

Dado que la secuencia U+FEFF es muy poco frecuente al principio de un archivo de texto no Unicode normal, puede servir como marcador implícito o firma para identificar el archivo como un archivo Unicode. Las aplicaciones que leen archivos de texto Unicode y no Unicode deben usar la presencia de esta secuencia como indicador de que es más probable que el archivo sea Unicode. Compare esta técnica con el uso del marcador EOF de MS-DOS para finalizar los archivos de texto.

Cuando una aplicación encuentra U+FEFF al principio de un archivo de texto, normalmente procesa el archivo como un archivo Unicode, aunque puede realizar comprobaciones heurísticas adicionales para la comprobación. Esta comprobación puede ser tan sencilla como probar para averiguar si la variación en los bytes de orden inferior es mucho mayor que la variación en los bytes de orden superior. Por ejemplo, si el texto ASCII se convierte en texto Unicode, cada segundo byte es 0. Además, la comprobación de los caracteres de retorno de avance de línea y carro (U+000A y U+000D) y para el tamaño de archivo par o impar puede proporcionar un indicador seguro de la naturaleza del archivo.

Cuando una aplicación encuentra U+FFFE al principio de un archivo de texto, interpreta que el archivo es un archivo Unicode con inversión de bytes. La aplicación puede intercambiar el orden de los bytes o avisar al usuario de que se ha producido un error.

Dado que el carácter de marca de orden de bytes Unicode no se encuentra en ninguna página de códigos, desaparece si los datos se convierten a ANSI. A diferencia de otros caracteres Unicode, no se reemplaza por un carácter predeterminado cuando se convierte. Si se encuentra una marca de orden de bytes en el centro de un archivo, no se interpreta como un carácter Unicode y no tiene ningún efecto en la salida de texto.

Nota:

El valor Unicode U+FFFF es incorrecto en archivos de texto sin formato y no se puede pasar entre aplicaciones. Está reservado para el uso privado de una aplicación.

 

Uso de caracteres especiales en Unicode