If you're seeing this message, it means we're having trouble loading external resources on our website.

Si estás detrás de un filtro de páginas web, por favor asegúrate de que los dominios *.kastatic.org y *.kasandbox.org estén desbloqueados.

Contenido principal

Almacenar texto en binario

Las computadoras pueden almacenar más que solo números en binario. Pero, ¿cómo pueden los números binarios representar cosas que no son números, tales como letras y símbolos?
Resulta que todo lo que se necesita es un poco de cooperación humana. Debemos acordar codificaciones, mapeos de un carácter a un número binario.

Una codificación simple

Por ejemplo, ¿qué pasa si queremos guardar los siguientes símbolos en binario?
☮️❤️😀
Podemos inventar esta codificación simple:
BinarioSímbolo
01☮️
10❤️
11😀
Llámémosla codificación HPE. Ayuda que las codificaciones tengan nombres, para que los programadores sepan que usan la misma codificación.
Si un programa de computadora necesita almacenar el símbolo ❤️ en su memoria, puede almacenar 10 en su lugar. Cuando el programa necesita mostrar 10 al usuario, puede recordar la codificación HPE y mostrar ❤️ en su lugar.
Los programas y archivos de computadora a menudo necesitan almacenar varios caracteres, y pueden hacerlo encadenando la secuencia de codificaciones de cada carácter.
Un programa podría escribir un archivo llamado "msg.hpe" con estos datos:
010111111010
Un programa en otra computadora que entienda la codificación HPE puede entonces abrir "msg.hpe" y mostrar la secuencia de símbolos.
Comprueba tu comprensión
¿Qué secuencia mostraría el programa?
Escoge 1 respuesta:

La codificación HPE sólo utiliza 2 bits, lo que limita cuántos símbolos puede representar.
Comprueba tu comprensión
¿Cuántos símbolos puede representar una codificación de 2 bits?
  • Tu respuesta debe ser
  • un entero, como 6
  • una fracción propia simplificada, como 3/5
  • una fracción impropia simplificada, como 7/4
  • un número mixto, como 1 3/4
  • un decimal exacto, como 0.75
  • un múltiplo de pi, como 12 pi o 2/3 pi

Sin embargo, con más bits de información, una codificación puede representar suficientes letras para que las computadoras almacenen mensajes, documentos y páginas web.

Codificación ASCII

ASCII fue una de las primeras codificaciones estándard. Fue inventada en la década de 1960, cuando la telegrafía telex era la principal forma de comunicación a larga distancia, pero todavía está en uso hoy en día en sistemas informáticos modernos.1
Los teletipistas escribían mensajes en teletipos como este:
Foto de una máquina de teletipo, compuesta por un teclado mecánico, un trozo de papel que sale con letras escritas, y un mecanismo para leer y perforar tiras de papel de entrada.
Una máquina teletipo ASR 33. Fuente de la imagen: Marcin Wichary
El teletipo de ese entonces usaba el estándar ASCII para codificar en binario cada carácter tecleado, y luego almacenar o transmitir esos datos binarios.
Esta página de un manual de teletipo de 1972 muestra los 128 códigos ASCII:
Una tabla escaneada de codificaciones ASCII.
Tabla ASCII del teletipo TermiNet 300. Fuente de la imagen: Wikipedia
Cada carácter ASCII se codifica en binario con 7 bits. En la tabla anterior, el encabezado de la columna indica los primeros 3 bits y el encabezado del renglón indica los 4 bits finales. El primer carácter es "NUL", codificado como 0000000.
Los primeros 32 códigos representan "caracteres de control", los que tenían algún efecto en lugar de imprimir una letra. "BEL" (codificado en binario como 0000111) hacía sonar una campana o pitido. "ENQ" (codificado como 0000101) representaba una consulta, una solicitud para que la estación receptora se identificara.
Los caracteres de control fueron originalmente diseñados para teletipos y telegrafia, pero muchos han sido reutilizados para computadoras modernas y para Internet; especialmente "CR" y "LF". "CR" (0001101) representaba un "retorno de carro" en los teletipos, mover la cabeza de impresión al inicio de la línea. "LF" (0001010) representaba un "avance de línea", avanzar la cabeza de impresión una línea hacia abajo. Los protocolos modernos de Internet, como HTTP, FTP y SMTP, utilizan una combinación de "CR" + "LF" para representar el final de las líneas.
Los 96 caracteres ASCII restantes se ven mucho más familiares.
Estas son las primeras 8 letras mayúsculas:
BinarioCáracter
1000001A
1000010B
1000011C
1000100D
1000101E
1000110F
1000111G
1001000H
De acuerdo con el estándar ASCII, podemos codificar un mensaje de cuatro letras en binario:
1000011100100010001011000110
Comprueba tu comprensión
¿Qué palabra representan los datos binarios codificados en ASCII?
Escoge 1 respuesta:

Sin embargo, hay varios problemas con la codificación ASCII.
El primer gran problema es que ASCII sólo incluye letras del alfabeto inglés y un conjunto limitado de símbolos.
Un lenguaje que utiliza menos de 128 caracteres podría inventar su propia versión de ASCII para codificar texto en su idioma, pero ¿qué pasaría con un archivo de texto con caracteres de varios idiomas? ASCII no podría codificar una cadena como: "Hola, José, ¿quieres Glühwein? Cuesta 10 €.
Y ¿qué pasa con los idiomas con miles de caracteres? ASCII no podría codificar suficientes simbolos para manejar una frase china como "你好,想要一盘饺子吗?十块钱。"
El otro problema con la codificación ASCII es que utiliza 7 bits para representar cada carácter, mientras que las computadoras típicamente almacenan información en bytes, unidades de 8 bits, y a los programadores no les gusta desperdiciar memoria.
Cuando las primeras computadoras empezaron a usar ASCII para codificar caracteres, diferentes computadoras tenían varias maneras de utilizar el último bit. Por ejemplo, las computadoras HP usaron el octavo bit para representar los caracteres utilizados en países europeos (como "£" y "Ü"). Las TRS-80 usaban el bit para gráficas a color, y las de Atari usaban ese bit para versiones inversas en blanco sobre negro de los primeros 128 caracteres.2
¿El resultado? Un archivo "ASCII" creado en una aplicación no tenía ningún sentido al abrirlo en otra aplicación compatible con "ASCII".
Las computadoras necesitaban una nueva codificación, una basada en bytes de 8 bits para representar todos los idiomas del mundo.

Unicode

Pero primero, ¿cuántos caracteres se necesitan para representar los idiomas del mundo? ¿Cuáles caracteres son básicamente los mismos en todos los idiomas, aunque tengan sonidos diferentes?
En 1987, un grupo de ingenieros en computación intentaron responder esas preguntas. Finalmente inventaron Unicode, un conjunto universal de caracteres que asigna a cada uno un "punto de código" (un número hexadecimal) y un nombre a cada carácter.3
Por ejemplo, el cáracter "ą" se asigna a "U+0105" y se llama "Letra latína minúscula A con Ogonek". Hay un cáracter que se ve como "ą" en 13 idiomas, tales como polaco y lituano. Entonces, de acuerdo con Unicode, la "ą" en la palabra polaca "robią" y la "ą" en la palabra lituana "aslą" son el mismo cáracter. Unicode ahorra espacio al unificar caracteres en varios idiomas.
Pero todavía hay muchos caracteres por codificar. El conjunto de caracteres Unicode empezó con 7,129 caracteres con nombre en 1991 y ha crecido a 137,929 caracteres en 2019. La mayoría de esos caracteres describen los ideogramas de chino, japonés y coreano, como "U+6728" que se refiere a "木". También incluye más de 1,200 símbolos de emoji ("U+1F389" = "🎉").4
Unicode es un conjunto de caracteres, pero no es una codificación. Afortunadamente, otro grupo de ingenieros abordó el problema de codificar Unicode eficientemente en binario.

UTF-8

En 1992, científicos de computación inventaron UTF-8, una codificación que es compatible con ASCII, pero también resuelve sus problemas.5
UTF-8 puede describir cualquier carácter del estándar Unicode mediante 1, 2, 3 o 4 bytes.
Cuando un programa de computadora lee un archivo de texto UTF-8, sabe cuántos bytes representan el siguiente carácter de acuerdo a cuántos bits 1 encuentra al principio del byte.
Número de bytesByte 1Byte 2Byte 3Byte 4
10xxxxxxx
2110xxxxx10xxxxxx
31110xxxx10xxxxxx10xxxxxx
411110xxx10xxxxxx10xxxxxx10xxxxxx
Si no hay bits con 1 en el prefijo (o sea, si el primer bit es 0), eso indica un carácter representado por un solo byte. Los 7 bits restantes del byte se utilizan para representar los 128 caracteres ASCII originales. Esto significa que una secuencia de caracteres ASCII de 8 bits es también una secuencia válida UTF-8.
Dos bytes que empiezan con 110 se utilizan para codificar el resto de caracteres de los idiomas de escritura latina (como español, alemán) además de otros idiomas como griego, hebreo y árabe. Tres bytes que empiezan con 1110 codifican la mayoría de los caracteres para idiomas asiáticos (por ejemplo, chino, japonés, coreano). Cuatro bytes que comienzan con 11110 codifican todo lo demás, desde escrituras históricas raramente utilizados hasta los símbolos emoji de uso cada vez más común.
Comprueba tu comprensión
Según el estándar UTF-8, ¿cuántos caracteres están representados por estos 8 bytes?
0100100111110000100111111001001010011001111000101001001110001010
  • Tu respuesta debe ser
  • un entero, como 6
  • una fracción propia simplificada, como 3/5
  • una fracción impropia simplificada, como 7/4
  • un número mixto, como 1 3/4
  • un decimal exacto, como 0.75
  • un múltiplo de pi, como 12 pi o 2/3 pi

La mayoría de los lenguajes de programación modernos tienen UTF-8 ya integrado, así que la mayoría de los programadores nunca necesitan saber exactamente cómo convertir de caracteres a binario.
✏️ Intenta usar JavaScript para codificar cadenas en UTF-8 en el siguiente rectángulo. Juega con varios idiomas y símbolos.
El estándar de codificación UTF-8 es ahora la codificación dominante de archivos HTML en web, lo que representa el 94.5% de las páginas web hasta diciembre de 2019.6
🔎 Si haces clic derecho en esta página web ahora mismo, y seleccionas "ver fuente de página", puedes buscar la cadena "utf-8" y ver que esta página web está codificada en UTF-8.
En general, una buena codificación puede representar la mayor cantidad de información con el menor número de bits. UTF-8 es un gran ejemplo de ello, pues puede codificar letras inglesas comunes con sólo 1 byte, pero es suficientemente flexible para codificar miles de letras con bytes adicionales.
Sin embargo, UTF-8 es sólo una codificación posible, UTF-16 y UTF-32 son codificaciones alternativas que también pueden representar todos los caracteres Unicode. También hay codificaciones específicas a un idioma, como Shift-JIS para japonés. Los programas de computadora pueden usar la codificación que mejor se adapte a sus necesidades y restricciones.

🙋🏽🙋🏻‍♀️🙋🏿‍♂️¿Tienes alguna pregunta sobre este tópico? Nos encantaría contestarte; ¡simplemente pregunta en el area de preguntas abajo!

¿Quieres unirte a la conversación?

  • Avatar sneak peak purple style para el usuario J.
    Nota: Los bytes se pueden utilizar para no solo para números sino también para caracteres, en estos casos a las secuencias de números se les asigna letras, pero en caso de lenguajes mas extensos se usan lo que es el Unicode y el UTF-8, este ultima puede representar todo tipo de caracteres con el uso de 4 bytes, dependiendo de la cantidad de 1s con lo que comience serán los bytes a utilizar para representar un carácter.
    (3 votos)
    Avatar Default Khan Academy avatar para el usuario
  • Avatar aqualine ultimate style para el usuario Alexia Itzel Cuahuizo Vázquez
    puedo escribir cosas como 0010 00000000 o afuerza debe de ser 00000010 00000000
    (0 votos)
    Avatar Default Khan Academy avatar para el usuario
¿Sabes inglés? Haz clic aquí para ver más discusiones en el sitio en inglés de Khan Academy.