“UTF-8” es la abre­via­tu­ra de “8-bit Uni­co­de­Tra­n­s­fo­r­ma­tion Format” y designa a la co­di­fi­ca­ción de ca­ra­c­te­res más extendida en la World Wide Web. El estándar in­te­r­na­cio­nal Unicode incluye tanto signos li­n­güí­s­ti­cos como elementos textuales de (casi) todos los idiomas, para el pro­ce­sa­mie­n­to ele­c­tró­ni­co de datos. Por ello, los códigos UTF-8 de­sem­pe­ñan para Unicode un papel fu­n­da­me­n­tal.

Crear una página web
Estás de suerte, tu página web ahora con IA
  • Creador de páginas web rápido e intuitivo
  • Imágenes y textos in­s­ta­n­tá­neos con SEO op­ti­mi­za­do por IA
  • Dominio, SSL y buzón de correo ele­c­tró­ni­co incluidos

El de­sa­rro­llo de la co­di­fi­ca­ción UTF-8

UTF-8 es una co­di­fi­ca­ción de ca­ra­c­te­res que le asigna una cadena de bits de­te­r­mi­na­da, a cada carácter Unicode y que puede leerse como un número binario. Esto significa que UTF-8 asigna un número binario fijo a todas las co­n­so­na­n­tes, cifras y símbolos de una creciente variedad de idiomas. Los or­ga­ni­s­mos in­te­r­na­cio­na­les para los que son im­po­r­ta­n­tes los es­tá­n­da­res de Internet y que, por tanto, quieren es­ta­ble­cer, están tra­ba­ja­n­do para hacer que UTF8 alcance un tamaño in­di­s­cu­ti­ble para la co­di­fi­ca­ción, entre otros, tanto el W3C como el Internet En­gi­nee­ri­ng Task Force (IETF). De hecho, en el 2009, la mayoría de páginas web de todo el mundo ya estaban uti­li­za­n­do la co­di­fi­ca­ción UTF-8. Según un informe de W3Techs, en abril de 2025 el 98,6 % de todas las páginas web ya uti­li­za­ban esta co­di­fi­ca­ción de ca­ra­c­te­res.

Problemas an­te­rio­res a la in­tro­du­c­ción de UTF 8

Di­fe­re­n­tes zonas con idiomas similares de­sa­rro­lla­ron, en su momento, sus propios es­tá­n­da­res de co­di­fi­ca­ción debido a sus di­fe­re­n­tes pre­te­n­sio­nes. En los países de habla inglesa, por ejemplo, solo era necesario el código ASCII, cuya es­tru­c­tu­ra permite asignar 128 ca­ra­c­te­res a una cadena de ca­ra­c­te­res legible por ordenador.

Sin embargo, los ca­ra­c­te­res asiáticos o el alfabeto cirílico utilizan más ca­ra­c­te­res in­di­vi­dua­les únicos y algunos idiomas tienen ca­ra­c­te­res que no existen en ASCII. Además, la asi­g­na­ción de di­fe­re­n­tes co­di­fi­ca­cio­nes podía incluso du­pli­car­se, lo que dio lugar a que, por ejemplo, un documento redactado en ruso se vi­sua­li­za­ra en un ordenador es­ta­dou­ni­de­n­se con el sistema de ca­ra­c­te­res latinos asignados al sistema, en lugar de con ca­ra­c­te­res cirílicos. Las in­cohe­re­n­cias re­su­l­ta­n­tes di­fi­cu­l­ta­ron co­n­si­de­ra­ble­me­n­te la co­mu­ni­ca­ción in­te­r­na­cio­nal.

Orígenes de UTF-8

Para so­lu­cio­nar esta pro­ble­má­ti­ca, Joseph D. Becker de­sa­rro­lló para Xerox entre 1988 y 1991 el juego de ca­ra­c­te­res universal Unicode. A partir de 1992, el consorcio in­du­s­trial de TI X/Open también comenzó a buscar un sistema para sustituir a ASCII y así, ampliar el re­pe­r­to­rio de ca­ra­c­te­res, aunque la co­di­fi­ca­ción tenía que seguir siendo co­m­pa­ti­ble con ASCII.

La primera co­di­fi­ca­ción, que recibió el nombre de UCS-2, no cumplía con este requisito, pues tra­n­s­fe­ría los números de ca­ra­c­te­res en valores de 16 bits. UTF-1 también fracasó, en parte, por el conflicto de las asi­g­na­cio­nes Unicode con las asi­g­na­cio­nes de ca­ra­c­te­res ASCII ya exi­s­te­n­tes. Como resultado, un servidor co­n­fi­gu­ra­do basándose en ASCII ofrecía ca­ra­c­te­res erróneos, lo que se convirtió en un problema co­n­si­de­ra­ble, puesto que en dicha época este era el sistema con el que tra­ba­ja­ban la mayoría de or­de­na­do­res en lengua inglesa.

El siguiente avance fue el File System Safe UCS Tra­n­s­fo­r­ma­tion Format (FSS-UTF) de Dave Prosser, que eliminó la su­pe­r­po­si­ción con ca­ra­c­te­res ASCII. En agosto de ese mismo año, el borrador fue pasando por las manos de círculos expertos. En los Bell Labs, tra­ba­ja­ban en el sistema operativo Plan 9, los co­fu­n­da­do­res de Unix Ken Thompson y Rob Pike, conocidos por haber obtenido varios Premios Nobel. Basándose en la idea de Prosser, de­sa­rro­lla­ron una co­di­fi­ca­ción au­to­si­n­cro­ni­za­da (cada carácter indica los bits que necesita) y es­ta­ble­cie­ron reglas para la asi­g­na­ción de las co­n­so­na­n­tes que podían re­pre­se­n­tar­se de forma distinta en el código (por ejemplo, “ü” como carácter único o “u + ¨”. De esta manera, uti­li­za­ron la co­di­fi­ca­ción con éxito para su sistema operativo y se lo pre­se­n­ta­ron a las personas re­s­po­n­sa­bles. Así fue como se de­sa­rro­lló FSS-UTF, hoy en día conocido como “UTF-8”.

UTF-8 en el juego de ca­ra­c­te­res Unicode: un estándar para todos los idiomas

La co­di­fi­ca­ción UTF-8 es un formato de tra­n­s­fo­r­ma­ción del estándar Unicode. El estándar in­te­r­na­cio­nal ISO 10646 define a Unicode a grandes rasgos con el nombre de “Universal Coded Character Set”. Los de­sa­rro­lla­do­res de Unicode, por su parte, delimitan ciertos pa­rá­me­tros para su apli­ca­ción práctica. No obstante, el estándar tiene como objeto ga­ra­n­ti­zar la co­di­fi­ca­ción uniforme y co­m­pa­ti­ble a nivel in­te­r­na­cio­nal de ca­ra­c­te­res y elementos textuales.

En su in­tro­du­c­ción en 1991, Unicode definió 24 sistemas de escritura modernos y signos de moneda para el pro­ce­sa­mie­n­to de datos. En el estándar Unicode publicado en 2024, el número aumentó a 168. Existen varios formatos de tra­n­s­fo­r­ma­ción Unicode, conocidos como “UTF”, que permiten re­pro­du­cir los 1.114.112 posibles puntos de código (co­de­poi­nts). Tres formatos se han impuesto: UTF-8, UTF-16 y UTF-32. Otras co­di­fi­ca­cio­nes como UTF-7 o SCSU, aunque tienen sus ventajas, no han logrado co­n­so­li­dar­se. Unicode está dividido en 17 niveles, cada uno con 65.536 ca­ra­c­te­res. Cada nivel consta de 16 columnas y filas. El nivel cero, la Basic Mu­l­ti­li­n­gual Plane (BMP), abarca la mayoría de los sistemas de escritura ac­tua­l­me­n­te uti­li­za­dos en el mundo, así como signos de pu­n­tua­ción, ca­ra­c­te­res de control y símbolos. Ac­tua­l­me­n­te, se utilizan seis niveles más:

  • Su­p­ple­me­n­ta­ry Mu­l­ti­li­n­gual Plane (capa 1): sistemas de escritura hi­s­tó­ri­cos, ca­ra­c­te­res no muy uti­li­za­dos
  • Su­p­ple­me­n­ta­ry Ideo­gra­phic Plane (capa 2): ca­ra­c­te­res CJK poco ha­bi­tua­les (“Chinese, Japanese, Korean” (chino, japonés, coreano))
  • Tertiary Ideo­gra­phic Plane (capa 3): desde la versión 15.1 de Unicode, se codifican aquí más ca­ra­c­te­res CJK (chino, japonés y coreano).
  • Su­p­ple­me­n­ta­ry Spe­cia­l­Pu­r­po­se Plane (capa 14): ca­ra­c­te­res de control in­di­vi­dua­les
  • Su­p­ple­me­n­ta­ry Private Use Area – A (capa 15): uso privado
  • Su­p­ple­me­n­ta­ry Private Use Area – B (capa 16): uso privado

Los códigos UTF permiten acceder a todos los códigos Unicode y las ca­ra­c­te­rí­s­ti­cas co­rre­s­po­n­die­n­tes se re­co­mie­n­dan para de­te­r­mi­na­dos campos de apli­ca­ción.

Las al­te­r­na­ti­vas UTF-32 y UTF-16

UTF-32 siempre trabaja con 32 bits, es decir, 4 bytes y su es­tru­c­tu­ra simple aumenta la le­gi­bi­li­dad del formato. En los idiomas, en concreto los que tienen el alfabeto latino y solo utilizan los primeros 128 ca­ra­c­te­res, la co­di­fi­ca­ción utiliza más memoria de la necesaria (4 bytes en lugar de 1).

UTF-16 se es­ta­ble­ció como formato de pre­se­n­ta­ción en sistemas ope­ra­ti­vos como Apple macOS y Microsoft Windows. Sin embargo, también se aplica en muchos fra­me­wo­r­ks de de­sa­rro­llo de software, siendo uno de los UTF más antiguos que todavía siguen uti­li­zá­n­do­se. Su es­tru­c­tu­ra es es­pe­cia­l­me­n­te apta para ahorrar espacio en la co­di­fi­ca­ción de ca­ra­c­te­res li­n­güí­s­ti­cos no latinos. La mayoría de ca­ra­c­te­res se re­pre­se­n­tan con 2 bytes (16 bits) y pocas veces se duplica la longitud a 4 bytes.

Eficiente y escalable: UTF-8

UTF-8 está compuesto por hasta cuatro cadenas de bits formadas por 8 bits re­s­pe­c­ti­va­me­n­te y su antecesor ASCII consta de una cadena con 7 bits. Ambas co­di­fi­ca­cio­nes definen los primeros ca­ra­c­te­res co­di­fi­ca­dos de forma co­n­grue­n­te, pero lo esencial de los ca­ra­c­te­res para la lengua inglesa es que están cubiertos por un byte. Para los idiomas con el alfabeto latino, este formato es el que utiliza el espacio de al­ma­ce­na­mie­n­to de la manera más eficiente posible, por lo que los sistemas ope­ra­ti­vos Unix y Linux lo utilizan de forma interna. El papel más im­po­r­ta­n­te de UTF-8 está re­la­cio­na­do con las apli­ca­cio­nes de Internet a la hora de vi­sua­li­zar texto en la World Wide Web o en correos ele­c­tró­ni­cos.

Gracias a una es­tru­c­tu­ra con capacidad para au­to­si­n­cro­ni­zar­se, la le­gi­bi­li­dad se mantiene a pesar de la longitud variable por carácter. Sin las re­s­tri­c­cio­nes de Unicode, UTF-8 permite asignar UTF-8 4.398.046.511.104 ca­ra­c­te­res, pero con la li­mi­ta­ción de 4 bytes de Unicode solo resultan efectivos 221, lo que es más que su­fi­cie­n­te. El rango de Unicode tiene, además, capas vacías para muchos otros sistemas de escritura. La asi­g­na­ción exacta evita el so­la­pa­mie­n­to de puntos de código, lo que re­s­tri­n­gía la co­mu­ni­ca­ción en el pasado.

Mientras que UTF-16 y UTF-32 también permiten una asi­g­na­ción exacta, UTF-8 utiliza el espacio de al­ma­ce­na­mie­n­to para el sistema latino de un modo es­pe­cia­l­me­n­te eficiente y está diseñado para que di­fe­re­n­tes sistemas de escritura puedan coexistir sin problemas y para darles cobertura. Esto permite la vi­sua­li­za­ción si­mu­l­tá­nea y si­g­ni­fi­ca­ti­va en campos de texto sin problemas de co­m­pa­ti­bi­li­dad.

Aspectos básicos: la co­di­fi­ca­ción UTF-8 y su co­m­po­si­ción

Por un lado, la co­di­fi­ca­ción UTF-8 sorprende por la co­m­pa­ti­bi­li­dad re­tró­gra­da con ASCII y, por otro, por una es­tru­c­tu­ra capaz de au­to­si­n­cro­ni­zar­se que les facilita a los de­sa­rro­lla­do­res la tarea de atisbar fuentes de error re­tro­s­pe­c­ti­va­me­n­te. UTF utiliza solo 1 byte para todos los ca­ra­c­te­res ASCII y el número total de cadenas de bits puede ide­n­ti­fi­car­se en las primeras cifras del número binario. Dado que el código ASCII solo comprende 7 bits, el código es 0. El 0 completa el espacio de memoria hasta llegar a un byte entero y señaliza el inicio de una cadena sin cadenas sucesivas. El nombre “UTF-8” se expresa, por ejemplo, como número binario con la co­di­fi­ca­ción UTF-8 de la siguiente manera:

Carácter U T F - 8
UTF-8, binario 01010101 01010100 01000110 00101101 00111000
Punto de Unicode, he­xa­de­ci­mal U+0055 U+0054 U+0046 U+002D U+0038

La co­di­fi­ca­ción UTF-8 asigna una única cadena de bits a los ca­ra­c­te­res ASCII como los empleados en la tabla. Los si­guie­n­tes ca­ra­c­te­res y símbolos dentro de Unicode tienen de dos a cuatro cadenas de 8 bits. La primera cadena recibe el nombre de byte de inicio y las cadenas si­guie­n­tes son bytes sucesivos. Los bytes de inicio con bytes sucesivos siempre empiezan por 11 y los bytes sucesivos por 10. Si se busca un de­te­r­mi­na­do punto en el código ma­nua­l­me­n­te, puede re­co­no­ce­r­se el principio de un carácter co­di­fi­ca­do con los ma­r­ca­do­res 0 y 11. El primer carácter multibyte im­pri­mi­ble es el signo de ex­cla­ma­ción invertido:

Carácter ¡
UTF-8, binario 11000010 10100001
Punto de Unicode, he­xa­de­ci­mal U+00A1

La co­di­fi­ca­ción de prefijos evita que se codifique un carácter adicional en una cadena de bytes. Si una secuencia de bytes comienza a mitad de un documento, el ordenador seguirá mostrando los ca­ra­c­te­res legibles, ya que no visualiza los ca­ra­c­te­res in­co­m­ple­tos. Si desde el principio buscas un carácter, la li­mi­ta­ción de 4 bytes hará que no sea necesario que re­tro­ce­das en ningún punto más de tres cadenas de bytes para localizar el byte de inicio:

  • 110xxxxx re­pre­se­n­ta 2 bytes
  • 1110xxxx re­pre­se­n­ta 3 bytes
  • 11110xxx re­pre­se­n­ta 4 bytes

En Unicode, el valor del byte asignado se co­rre­s­po­n­de con el número del carácter, lo que permite un orden léxico, aunque hay algunas brechas. El rango de Unicode co­m­pre­n­di­do entre U+007F y U+009F comprende números de control no asignados. Así, el estándar UTF-8 no asigna ca­ra­c­te­res im­pri­mi­bles, sino solo comandos.

Como ya se ha señalado, la co­di­fi­ca­ción UTF-8 puede, en teoría, enlazar cadenas de hasta 8 bytes. Sin embargo, Unicode requiere una longitud de máximo 4 bytes. Esto tiene, por un lado, como co­n­se­cue­n­cia que las cadenas de bytes con 5 bytes o más no suelen ser válidas. Por otro, esta li­mi­ta­ción es reflejo del afán de crear un código lo más compacto (con bajo consumo de memoria) y es­tru­c­tu­ra­do posible. Así, una norma fu­n­da­me­n­tal al emplear UTF-8 es que siempre debe uti­li­zar­se la co­di­fi­ca­ción más corta posible.

Nota

Esta regla es la razón por la que las se­cue­n­cias de bytes que comienzan con 192 y 193 no son válidas. Esto se debe a que re­pre­se­n­tan po­te­n­cia­l­me­n­te ca­ra­c­te­res en el rango ASCII (0–127) con 2 bytes, cuando ya están co­di­fi­ca­dos con 1 byte.

Sin embargo, para algunos ca­ra­c­te­res existen múltiples co­di­fi­ca­cio­nes equi­va­le­n­tes. Por ejemplo, la letra ä se codifica con 2 bytes: 11000011 10100100. Teó­ri­ca­me­n­te, es posible combinar los puntos de código para la letra “a” (01100001) y el signo dia­crí­ti­co “ ” (11001100 10001000) para re­pre­se­n­tar “ä”: 01100001 11001100 10001000. Aquí se utiliza la llamada forma de no­r­ma­li­za­ción Unicode NFD, en la que los ca­ra­c­te­res se de­s­co­m­po­nen de manera canónica. Ambas co­di­fi­ca­cio­nes mostradas conducen al mismo resultado (es decir, “ä”) y, por lo tanto, son ca­nó­ni­ca­me­n­te equi­va­le­n­tes*.

Nota

Las no­r­ma­li­za­cio­nes sirven para unificar re­pre­se­n­ta­cio­nes Unicode di­fe­re­n­tes del mismo carácter. En este contexto, la equi­va­le­n­cia canónica es im­po­r­ta­n­te: indica que dos se­cue­n­cias de ca­ra­c­te­res pueden estar co­di­fi­ca­das de manera diferente, pero tener el mismo si­g­ni­fi­ca­do y re­pre­se­n­ta­ción. La equi­va­le­n­cia co­m­pa­ti­ble, por otro lado, permite se­cue­n­cias que se di­fe­re­n­cian en formato o estilo, pero son equi­va­le­n­tes en contenido. Las formas de no­r­ma­li­za­ción Unicode (por ejemplo, NFC, NFD, NFKC, NFKD) emplean estos conceptos para es­ta­n­da­ri­zar los textos. Esto asegura que las co­m­pa­ra­cio­nes, or­de­na­cio­nes y búsquedas funcionen de manera coherente y confiable.

Hay algunos rangos de valores de Unicode sin definir para UTF-8, pues estos se utilizan para los su­s­ti­tu­tos de UTF-16. El cuadro siguiente muestra los bytes de UTF-8 pe­r­mi­ti­dos según el grupo Internet En­gi­nee­ri­ng Task Force (IETF) (en verde se muestran los bytes válidos y en rojo los no válidos).

Imagen: Tabla: Rangos de valores UTF-8
La tabla ofrece una visión general de los rangos de valores UTF-8 válidos.

Co­n­ve­r­sión de código Unicode he­xa­de­ci­mal a UTF-8 binario

Mientras que los or­de­na­do­res solo leen números binarios, las personas usan el sistema decimal. Una interfaz a medio camino entre estas formas es el sistema he­xa­de­ci­mal, que sirve de ayuda para re­pre­se­n­tar cadenas de bits largas, para lo que utiliza cifras entre 0 y 9 y letras de la A a la F y actúa sobre la base del número 16. Como la cuarta potencia de 2, el sistema he­xa­de­ci­mal resulta más apto que el sistema decimal para re­pre­se­n­tar rangos de bytes de 8 dígitos.

Un dígito he­xa­de­ci­mal re­pre­se­n­ta una cadena de cuatro ca­ra­c­te­res (“nibble”) en un octeto. Un byte con ocho dígitos binarios también puede re­pre­se­n­tar­se con solo dos dígitos he­xa­de­ci­ma­les. Unicode utiliza el sistema he­xa­de­ci­mal para describir la posición de un carácter en el propio sistema y a partir de aquí pueden ca­l­cu­lar­se tanto el número binario como el punto de código de UTF-8.

En primer lugar, tiene que co­n­ve­r­ti­r­se el número he­xa­de­ci­mal y después adaptar los puntos de código a la es­tru­c­tu­ra de la co­di­fi­ca­ción UTF-8. Para facilitar la es­tru­c­tu­ra­ción puedes utilizar el siguiente cuadro, que muestra el número de puntos de código que tienen cabida en una cadena de bytes y la es­tru­c­tu­ra que puede esperarse en un rango de valores de Unicode de­te­r­mi­na­do.

Tamaño en bytes Bits libres para la de­te­r­mi­na­ción Primer punto de código de Unicode Último punto de código de Unicode Byte de inicio / byte 1 Byte sucesivo 2 Byte sucesivo 3 Byte sucesivo 4
1 7 U+0000 U+007F 0xxxxxxx
2 11 U+0080 U+07FF 110xxxxx 10xxxxxx
3 16 U+0800 U+FFFF 1110xxxx 10xxxxxx 10xxxxxx
4 21 U+10000 U+10FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

En un área de código puede asumirse la cantidad de bytes empleados, pues se respeta el orden léxico en la enu­me­ra­ción de los puntos de código de Unicode y de los números binarios de UTF-8. En el rango U+0800 y U+FFFF UTF-8 emplea 3 bytes, por lo que hay di­s­po­ni­bles 16 bits para expresar el punto de código de un símbolo. La inclusión de un número binario calculado en el esquema de UTF-8 tiene lugar de derecha a izquierda y los espacios en blanco a la izquierda deben co­m­ple­tar­se con ceros.

Ejemplo de cálculo:

El símboloᅢ(Hangul Junseong, Ä) se asocia en Unicode con U+1162. Para calcular el número binario es necesario convertir el número he­xa­de­ci­mal en un número decimal. Cada dígito del número se co­rre­s­po­n­de con la potencia co­rre­la­ti­va de 16. La cifra derecha tiene el valor más bajo con 160 = 1. Empezando desde la derecha, mu­l­ti­pli­ca el valor numérico de la cifra con el de la potencia y po­s­te­rio­r­me­n­te añade los re­su­l­ta­dos.

Imagen: Cálculo de ejemplo: convertir un número hexadecimal a decimal
En un primer paso, convierte el número he­xa­de­ci­mal a un número decimal.

4450 es el número decimal calculado que tendrá que co­n­ve­r­ti­r­se en un número binario. Para ello ha de dividirse por 2 hasta que el resultado sea 0. El valor Rest, escrito de derecha a izquierda, es el número binario.

Imagen: Ejemplo: cómo convertir un número decimal a binario
En el siguiente paso, convierte el número decimal a un número binario.

El código UTF-8 es­pe­ci­fi­ca 3 bytes para el punto de código U+1162, ya que el punto de código se encuentra entre U+0800 y U+FFFF. El primer byte comienza con 1110. Los dos bytes si­guie­n­tes comienzan cada uno con 10. Los bits restantes se completan en los bits libres, que no están definidos por la es­tru­c­tu­ra, de derecha a izquierda. Los bits sobrantes en el primer byte se completan con 0 hasta llenar el octeto. La co­di­fi­ca­ción UTF-8 se vería así:

11100001 10000101 10100010 (el punto de código insertado está en negrita)

Carácter Código Unicode, he­xa­de­ci­mal Número decimal Número binario UTF-8
ᅢ U+1162 Número decimal 4450 1000101100010 111000011000010110100010

UTF-8 en editores

UTF-8 es el estándar más utilizado en Internet. Sin embargo, algunos editores sencillos almacenan texto, pero no ne­ce­sa­ria­me­n­te en este formato. Microsoft Notepad, por ejemplo, utiliza no­r­ma­l­me­n­te una co­di­fi­ca­ción conocida como “ANSI”, tras la que se esconde la co­di­fi­ca­ción “Windows-1252” basada en ASCII. Para convertir un archivo de texto de Microsoft Word a UTF-8 (por ejemplo, para re­pro­du­cir di­fe­re­n­tes sistemas de escritura), sigue estos pasos: en “Guardar como” (“Save As”) se­le­c­cio­na la opción “Texto sin formato” (“Plain text”) en Tipo (“Save as type”).

Imagen: Captura de pantalla: guardar documento en Word
Microsoft Word también te permite guardar do­cu­me­n­tos como textos sin formato.

Se abre la ventana emergente ”Co­n­ve­r­sión de archivo”. En ”Co­di­fi­ca­ción de texto”, se­le­c­cio­ne la opción ”Otra co­di­fi­ca­ción” y de la lista, elija ”Unicode (UTF-8)”. En el menú de­s­ple­ga­ble ”Finalizar líneas con”, se­le­c­cio­ne “Retorno de carro/salto de celda” o “CR/LF”. Así de fácil se convierte un archivo al conjunto de ca­ra­c­te­res Unicode con UTF-8.

Imagen: Captura de pantalla: conversión de archivo en Word
Además de UTF-8, en la ventana “Co­n­ve­r­sión de archivo” también pueden se­le­c­cio­nar­se Unicode (UTF-16) con y sin Big Endian o ASCII y muchas otras co­di­fi­ca­cio­nes.

Abrir un archivo de texto sin marcar en el que no se sepa de antemano el tipo de co­di­fi­ca­ción utilizado puede ocasionar problemas de edición. En tales casos, Unicode permite recurrir a la “marca de orden de bytes” (Byte Order Mark o BOM). Con este carácter se puede mostrar si el documento tiene formato big endian o little endian. Si un programa de­co­di­fi­ca un archivo en UTF-16 little endian con ayuda de UTF-16 big endian, el texto re­su­l­ta­n­te se muestra lleno de errores.

Sin embargo, los do­cu­me­n­tos basados en el conjunto de ca­ra­c­te­res UTF-8 no tienen este problema, pues la cadena de bytes siempre se lee como una secuencia big endian. En este caso, la BOM muestra que el documento existente está co­di­fi­ca­do con UTF-8.

Nota

En algunas co­di­fi­ca­cio­nes (UTF-16 y UTF-32), los ca­ra­c­te­res que se vi­sua­li­zan con más de un byte pueden presentar el byte más relevante en posición delantera (izquierda) o trasera (derecha). Si el byte más im­po­r­ta­n­te (“Most Si­g­ni­fi­ca­nt Byte”, MSB) está delante, se añade “big endian” a la co­di­fi­ca­ción, pero si está detrás “little endian”.

La BOM se coloca antes de un flujo de datos o al principio de un archivo. Dicha marca tiene prioridad sobre el resto de in­s­tru­c­cio­nes e incluso sobre la cabecera HTTP, pues actúa como un tipo de firma para códigos Unicode y tiene el punto de código U+FEFF. La BOM se presenta de forma diferente en formato co­di­fi­ca­do en función de la co­di­fi­ca­ción utilizada.

Formato de co­di­fi­ca­ción BOM, codepoint: U+FEFF (hex.)
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

No se debe utilizar la marca de orden de bytes (BOM) si el protocolo lo prohíbe ex­plí­ci­ta­me­n­te o si sus datos ya están asignados a un tipo es­pe­cí­fi­co. Algunos programas, según el protocolo, esperan ca­ra­c­te­res ASCII. Dado que UTF-8 es re­tro­co­m­pa­ti­ble con la co­di­fi­ca­ción ASCII y su orden de bytes está definido, no necesita la BOM. De hecho, Unicode re­co­mie­n­da no utilizar la BOM con UTF-8. Sin embargo, dado que puede aparecer en código más antiguo y causar problemas, es im­po­r­ta­n­te ide­n­ti­fi­car la BOM si está presente.

Tu página web con dominio propio
Crea tu página web en minutos
  • Pla­n­ti­llas pro­fe­sio­na­les
  • Mo­di­fi­ca­ción del diseño con un solo clic
  • Dominio, SSL y correo ele­c­tró­ni­co
Ir al menú principal