representar-caracteres-en-binario

Cómo representar caracteres en binario

  • 11 min

Ya hemos visto como almacenar números enteros positivos y negativos, y números fraccionarios. Pero nuestros programas no solo van a tener números. Generalmente, también tendremos textos.

La representación de textos es uno de los quebraderos de cabeza de la informática desde sus orígenes. Lo vimos al hablar de Bytes, y Char, la codificación de textos fue un auténtico problema a resolver desde los primeros ordenadores.

Los caracteres o “letras” son un conjunto de símbolos que usamos para comunicarnos. Son un conjunto bastante extenso, que incluye letras mayúsculas, minúsculas, signos de puntuación, los propios dígitos del sistema decimal.

Afortunadamente ya lo tenemos muy superado, y casi nunca deberás preocuparte por ello demasiado. Pero, conviene que sepas cómo se codifican y se trabaja con ello (porque seguro que en algún momento lo necesitas).

Al hablar de números podríamos jugar con forma de representación. Al final, era un cambio de base. Pero al hablar de caracteres no queda otra que usar una tabla de traducción (ESTE número binario, se corresponde con ESTA letra).

Así que este problema se encontraron cuando empezaban a desarrollarse los primeros ordenadores. Dijeron, ¿Cómo de grande necesito que sea esa tabla? ¿Cuántos dígitos en binario necesito?

Y así surge la tabla ASCII 👇

Representación ASCII

El ASCII (American Standard Code for Information Interchange) es un estándar de codificación que data de 1963, que asigna un número entero único a cada carácter en el conjunto básico de caracteres ingleses.

Cada carácter ASCII se representa mediante un valor numérico de 7 bits, lo que permite un total de 128 caracteres diferentes.

Por ejemplo, el caracter ‘A’ tiene un valor ASCII de 65, que se representa en binario como 01000001.

Extended ASCII table

La tabla ASCII era muy limitada en cuanto a caracteres. Afortunadamente, la informática ya era normal que un Byte fueran 8 bits. De estos, ASCII sólo usaba 7bits, por lo que quedaban otros 128 caracteres para ampliarlo.

La tabla ASCII extendida es una extensión del estándar ASCII que aumenta el número de caracteres a 256 (del 128 al 255). Esto incluye caracteres adicionales como letras acentuadas, símbolos especiales, letras y caracteres utilizados en otros idiomas además del inglés (como el español, francés, alemán, entre otros).

La tabla ASCII extendida no es un estándar oficial único, sino que hay varias variantes que asignan diferentes caracteres a los códigos del 128 al 255. Algunas de las variantes más comunes son ISO 8859-1 (también conocida como Latin-1), ISO 8859-15 (Latin-9), Windows-1252, entre otras.

Unicode

A medida que la informática se volvía más global, el conjunto de caracteres ASCII (ni siquiera la versión extendida) resultaba insuficiente para representar todos los caracteres utilizados en diferentes idiomas y sistemas de escritura.

Para abordar esta limitación, se desarrolló Unicode, un estándar de codificación que asigna un código único a cada carácter utilizado en cualquier idioma del mundo.

Por ejemplo, el caracter ’✓’ tiene un valor Unicode de U+2713, que se representa en binario como 0010 0111 0001 0011

Unicode utiliza una representación de 16 bits (o más) para cada carácter, lo que permite la representación de un conjunto mucho más amplio de caracteres. Por compatibilidad, los primeros 128 caracteres Unicode son idénticos al conjunto de caracteres ASCII.

Actualmente la tabla Unicode tiene unos 150 mil caracteres codificados. Eso significa que también agotamos los 16bits (que llegarían hasta 65.536 caracteres). Y aquí es donde entra en juego UTF.

Codificación UTF

Unicode y UTF (Unicode Transformation Format) están estrechamente relacionados, pero son conceptos diferentes:

  • Unicode: Es un estándar de codificación de caracteres que asigna un número único a cada carácter en casi todos los sistemas de escritura conocidos en el mundo, incluyendo letras, números, símbolos y caracteres especiales. Por ejemplo, la letra “A” tiene un número único en Unicode, así como cualquier otro carácter que puedas imaginar.

  • UTF (Unicode Transformation Format): Es una forma de codificar los puntos de código de Unicode en secuencias de bytes. UTF define cómo estos puntos de código Unicode se almacenan en la memoria de una computadora o se transmiten a través de una red.

Existen varias variantes de UTF, como UTF-8, UTF-16, y UTF-32, que difieren en cómo representan los caracteres Unicode como secuencias de bytes.

Ahora, en cuanto a la cantidad de bytes que utiliza Unicode:

  • UTF-8: Es el más común y ampliamente utilizado. En UTF-8, cada carácter Unicode se representa usando 1, 2, 3 o 4 bytes. Los caracteres ASCII (los primeros 128 caracteres de Unicode) se representan con 1 byte en UTF-8, lo que significa que es compatible con ASCII. Los caracteres adicionales de Unicode utilizan más bytes según su rango.

  • UTF-16: Cada carácter Unicode se representa en UTF-16 usando 2 o 4 bytes. Los caracteres de Unicode que están en el rango “BMP” (Plano Multilingüe Básico) se representan con 2 bytes, mientras que los caracteres fuera del BMP utilizan 4 bytes.

  • UTF-32: Es el formato más simple, ya que asigna cada carácter Unicode exactamente a 4 bytes. Esto significa que cualquier carácter Unicode, sin importar su rango, se representará con 4 bytes en UTF-32.

En resumen, la cantidad de bytes que ocupa un carácter Unicode depende del formato de UTF que se esté utilizando:

  • UTF-8: 1 a 4 bytes por carácter
  • UTF-16: 2 o 4 bytes por carácter
  • UTF-32: Siempre 4 bytes por carácter

Por lo tanto, la respuesta a cuántos bytes tiene Unicode depende del formato de UTF que se esté utilizando para codificarlo.