Saltar al contenido

¿Qué es la codificación UTF-8? Una guía para no programadores

febrero 5, 2022

Texto: su importancia en Internet es evidente. Es la primera «T» en «HTTP», la única «T» en «HTML», y prácticamente todos los sitios web la usan de alguna manera, ya sea una URL, una copia de marketing, una revisión de producto, un Tweet viral o un entrada en el blog. (¡Hola!)

Libro de trabajo gratuito: Cómo planificar un rediseño de sitio web exitosoSin embargo, es posible que el texto web no sea tan simple como crees. Considere los miles de idiomas que se hablan hoy, o todos los signos de puntuación y símbolos que podemos agregar para mejorarlos, o el hecho de que se están creando nuevos emojis para capturar cada emoción humana. ¿Cómo almacenan y procesan todo esto los sitios web?

La verdad es que incluso algo tan básico como el texto requiere un sistema bien coordinado y claramente definido para aparecer en los navegadores web. En esta publicación, explicaré los conceptos básicos de una tecnología central para el texto en la web, UTF-8. Aprenderemos los conceptos básicos del almacenamiento y la codificación de texto, y discutiremos cómo ayuda a poner palabras atractivas en su sitio.

Antes de comenzar, debe estar familiarizado con los conceptos básicos de HTML y estar listo para sumergirse en un poco de ciencia informática.

¿Qué es UTF-8?

UTF-8 significa «Formato de transformación Unicode – 8 bits». Eso no es útil para nosotros todavía, así que rebobinemos a lo básico.

Binario: cómo las computadoras almacenan información

Para almacenar información, las computadoras utilizan un sistema binario. En binario, todos los datos se representan en secuencias de 1 y 0. La unidad más básica de binario es un un poco, que es solo un 1 o un 0. La siguiente unidad binaria más grande, un byte, consta de 8 bits. Un ejemplo de un byte es «01101011».

Todos los activos digitales que haya encontrado, desde software hasta aplicaciones móviles, sitios web e historias de Instagram, se basan en este sistema de bytes, que se unen de una manera que tiene sentido para las computadoras. Cuando nos referimos al tamaño de los archivos, nos referimos al número de bytes. Por ejemplo, un kilobyte es aproximadamente mil bytes y un gigabyte es aproximadamente mil millones de bytes.

El texto es uno de los muchos activos que las computadoras almacenan y procesan. El texto se compone de caracteres individuales, cada uno de los cuales se representa en las computadoras por una cadena de bits. Estas cadenas se ensamblan para formar palabras digitales, oraciones, párrafos, novelas románticas, etc.

ASCII: conversión de símbolos a binario

El Código estándar estadounidense para el intercambio de información (ASCII) fue uno de los primeros sistemas de codificación estandarizados para texto. La codificación es el proceso de convertir caracteres en lenguajes humanos en secuencias binarias que las computadoras pueden procesar.

La biblioteca de ASCII incluye todas las letras mayúsculas y minúsculas del alfabeto latino (A, B, C…), todos los dígitos del 0 al 9 y algunos símbolos comunes (como /, ! y ?). Asigna a cada uno de estos caracteres un código único de tres dígitos y un byte único.

La siguiente tabla muestra ejemplos de caracteres ASCII con sus códigos y bytes asociados.

PersonajeCódigo ASCIIBYTE
A06501000001
a09701100001
B06601000010
B09801100010
Z09001011010
z12201111010
004800110000
905700111001
!03300100001
?06300111111

Así como los caracteres se unen para formar palabras y oraciones en el lenguaje, el código binario lo hace en los archivos de texto. Entonces, la oración «El rápido zorro marrón salta sobre el perro perezoso». representado en binario ASCII sería:

 

01010100 01101000 01100101 00100000 01110001

01110101 01101001 01100011 01101011 00100000

01100010 01110010 01101111 01110111 01101110

00100000 01100110 01101111 01111000 00100000

01101010 01110101 01101101 01110000 01110011

00100000 01101111 01110110 01100101 01110010

00100000 01110100 01101000 01100101 00100000

01101100 01100001 01111010 01111001 00100000

01100100 01101111 01100111 00101110

Eso no significa mucho para nosotros los humanos, pero es el pan y la mantequilla de una computadora.

La cantidad de caracteres que ASCII puede representar está limitada a la cantidad de bytes únicos disponibles, ya que cada carácter obtiene un byte. Si haces los cálculos, encontrarás que hay 256 formas diferentes de agrupar ocho 1 y 0 juntos. Esto nos da 256 bytes diferentes, o 256 formas de representar un carácter en ASCII. Cuando se introdujo ASCII en 1960, estaba bien, ya que los desarrolladores solo necesitaban 128 bytes para representar todos los caracteres y símbolos en inglés que necesitaban.

Pero, a medida que la computación se expandió globalmente, los sistemas informáticos comenzaron a almacenar texto en idiomas además del inglés, muchos de los cuales usaban caracteres que no eran ASCII. Se crearon nuevos sistemas para asignar otros idiomas al mismo conjunto de 256 bytes únicos, pero tener múltiples sistemas de codificación era ineficiente y confuso. Los desarrolladores necesitaban una mejor forma de codificar todos los caracteres posibles con un solo sistema.

Unicode: una forma de almacenar todos los símbolos, siempre

Ingrese a Unicode, un sistema de codificación que resuelve el problema de espacio de ASCII. Al igual que ASCII, Unicode asigna un código único, denominado punto de código, a cada personaje. Sin embargo, el sistema más sofisticado de Unicode puede producir más de un millón de puntos de código, más que suficientes para dar cuenta de cada carácter en cualquier idioma.

Unicode es ahora el estándar universal para codificar todos los idiomas humanos. Y sí, incluso incluye emojis.

A continuación se muestran algunos ejemplos de caracteres de texto y sus puntos de código coincidentes. Cada punto de código comienza con «U» para «Unicode», seguido de una cadena única de caracteres para representar el carácter.

Personajepunto de código
AU+0041
aU+0061
0U+0030
9U+0039
!U+0021
ØU+00D8
ڃU+0683
U+0C9A
𠜎U+2070E
😁U+1F601

Si desea aprender cómo se generan los puntos de código y qué significan en Unicode, consulte esto explicación detallada.

Entonces, ahora tenemos una forma estandarizada de representar cada carácter usado por cada lenguaje humano en una sola biblioteca. Esto resuelve el problema de los múltiples sistemas de etiquetado para diferentes idiomas: cualquier computadora en la Tierra puede usar Unicode.

Pero, Unicode por sí solo no almacena palabras en binario. Las computadoras necesitan una forma de traducir Unicode a binario para que sus caracteres puedan almacenarse en archivos de texto. Aquí es donde entra UTF-8.

UTF-8: La pieza final del rompecabezas

UTF-8 es un sistema de codificación para Unicode. Puede traducir cualquier carácter Unicode a una cadena binaria única coincidente y también puede traducir la cadena binaria de nuevo a un carácter Unicode. Este es el significado de «UTF» o «Formato de transformación Unicode».

Existen otros sistemas de codificación para Unicode además de UTF-8, pero UTF-8 es único porque representa caracteres en unidades de un byte. Recuerde que un byte consta de ocho bits, de ahí el «-8» en su nombre.

Más específicamente, UTF-8 convierte un punto de código (que representa un solo carácter en Unicode) en un conjunto de uno a cuatro bytes. Los primeros 256 caracteres de la biblioteca Unicode, que incluyen los caracteres que vimos en ASCII, se representan como un byte. Los caracteres que aparecen más tarde en la biblioteca Unicode se codifican como unidades binarias de dos bytes, tres bytes y, finalmente, cuatro bytes.

A continuación se muestra la misma tabla de caracteres de arriba, con la salida UTF-8 para cada carácter agregado. Observe cómo algunos caracteres se representan como un solo byte, mientras que otros usan más.

Personajepunto de códigoCodificación binaria UTF-8
AU+004101000001
aU+006101100001
0U+003000110000
9U+003900111001
!U+002100100001
ØU+00D811000011 10011000
ڃU+068311011010 10000011
U+0C9A11100000 10110010 10011010
𠜎U+2070E11110000 10100000 10011100 10001110
😁U+1F60111110000 10011111 10011000 10000001

¿Por qué UTF-8 convertiría algunos caracteres a un byte y otros hasta cuatro bytes? En definitiva, para ahorrar memoria. Al usar menos espacio para representar caracteres más comunes (es decir, caracteres ASCII), UTF-8 reduce el tamaño del archivo y permite una cantidad mucho mayor de caracteres menos comunes. Estos caracteres menos comunes están codificados en dos o más bytes, pero está bien si se almacenan con moderación.

La eficiencia espacial es una ventaja clave de la codificación UTF-8. Si, en cambio, cada carácter Unicode estuviera representado por cuatro bytes, un archivo de texto escrito en inglés tendría cuatro veces el tamaño del mismo archivo codificado con UTF-8.

Otro beneficio de la codificación UTF-8 es su retrocompatibilidad con ASCII. Los primeros 128 caracteres de la biblioteca Unicode coinciden con los de la biblioteca ASCII y UTF-8 traduce estos 128 caracteres Unicode en las mismas cadenas binarias que ASCII. Como resultado, UTF-8 puede tomar un archivo de texto formateado por ASCII y convertirlo en texto legible por humanos sin problemas.

Caracteres UTF-8 en desarrollo web

UTF-8 es el método de codificación de caracteres más común que se utiliza actualmente en Internet y es el conjunto de caracteres predeterminado para HTML5. Más del 95% de todos los sitios web, probablemente incluido el suyo propio, almacene caracteres de esta manera. Además, los métodos comunes de transferencia de datos a través de la web, como XML y JSONestán codificados con estándares UTF-8.

Dado que ahora es el método estándar para codificar texto en la web, todas las páginas y bases de datos de su sitio deben usar UTF-8. Un sistema de administración de contenido o un creador de sitios web guardará sus archivos en formato UTF-8 de forma predeterminada, pero aún así es una buena idea asegurarse de seguir esta mejor práctica.

Los archivos de texto codificados con UTF-8 deben indicarlo al software que los procesa. De lo contrario, el software no traducirá correctamente el binario a caracteres. En los archivos HTML, es posible que vea una cadena de código como la siguiente cerca de la parte superior:

 

<meta charset="UTF-8">

Esto le dice al navegador que el archivo HTML está codificado por UTF-8, para que el navegador pueda traducirlo de nuevo a texto legible.

UTF-8 frente a UTF-16

Como mencioné, UTF-8 no es el único método de codificación para caracteres Unicode; también existe UTF-16. Estos métodos difieren en la cantidad de bytes que necesitan para almacenar un carácter. UTF-8 codifica un carácter en una cadena binaria de uno, dos, tres o cuatro bytes. UTF-16 codifica un carácter Unicode en una cadena de dos o cuatro bytes.

Esta distinción es evidente por sus nombres. En UTF-8, la representación binaria más pequeña de un carácter es un byte u ocho bits. En UTF-16, la representación binaria más pequeña de un carácter es de dos bytes o dieciséis bits.

Tanto UTF-8 como UTF-16 pueden traducir caracteres Unicode a binarios aptos para computadora y viceversa. Sin embargo, no son compatibles entre sí. Estos sistemas usan diferentes algoritmos para asignar puntos de código a cadenas binarias, por lo que la salida binaria para cualquier carácter dado se verá diferente de ambos métodos:

PersonajeCodificación binaria UTF-8Codificación binaria UTF-16
A0100000101000001 11011000 00001110 11011111
𠜎11110000 10100000 10011100 1000111001000001 11011000 00001110 11011111

La codificación UTF-8 es preferible a la UTF-16 en la mayoría de los sitios web porque utiliza menos memoria. Recuerde que UTF-8 codifica cada carácter ASCII en un solo byte. UTF-16 debe codificar estos mismos caracteres en dos o cuatro bytes. Esto significa que un archivo de texto en inglés codificado con UTF-16 tendría al menos el doble del tamaño del mismo archivo codificado con UTF-8.

UTF-16 solo es más eficiente que UTF-8 en algunos sitios web que no están en inglés. Si un sitio web usa un idioma con caracteres más antiguos en la biblioteca Unicode, UTF-8 codificará todos los caracteres como cuatro bytes, mientras que UTF-16 podría codificar muchos de los mismos caracteres como solo dos bytes. Aún así, si sus páginas están llenas de ABC y 123, quédese con UTF-8.

Descifrando el mundo de la codificación UTF-8

Esas fueron muchas palabras sobre palabras, así que resumamos lo que hemos cubierto:

  1. Las computadoras almacenan datos, incluidos los caracteres de texto, como binarios (1 y 0).
  2. ASCII fue una de las primeras formas de codificar o asignar caracteres a un código binario para que las computadoras pudieran almacenarlos. Sin embargo, ASCII no proporcionaba suficiente espacio para que los caracteres y números no latinos fueran…