- ASCII es un estándar de 7 bits que asigna códigos numéricos a 128 caracteres entre control e imprimibles.
- Se creó en los años 60 para unificar la representación de texto y aún es la base de protocolos y archivos de texto.
- Las extensiones de 8 bits y Unicode amplían el repertorio manteniendo intacto el rango 0–127 de US-ASCII.
- Conocer la tabla ASCII facilita depurar codificaciones, trabajar con cadenas y entender viejos y nuevos sistemas.

Si alguna vez te has preguntado cómo un ordenador transforma letras, números y símbolos en algo que pueda entender a nivel eléctrico, la respuesta pasa casi siempre por el mismo protagonista: el código ASCII. Es una especie de "diccionario" que traduce cada carácter a un número, y ese número a una combinación de bits que las máquinas sí saben manejar.
Aunque hoy convivimos con estándares mucho más amplios como Unicode, ASCII sigue siendo la base de una enorme cantidad de sistemas, protocolos y programas. Entender qué es, cómo está organizado, para qué se usa y en qué se diferencia del ASCII extendido o de Unicode te ayuda a leer logs, depurar errores de codificación y, en general, moverte con mucha más soltura en el mundo del desarrollo y las redes.
¿Qué es el código ASCII y por qué es tan importante?
ASCII son las siglas de American Standard Code for Information Interchange (Código Estándar Americano para el Intercambio de Información). En esencia, es un sistema de codificación de caracteres basado en el alfabeto latino que asigna un número entero a cada letra, dígito, signo de puntuación, símbolo y ciertos caracteres de control.
Originalmente, el estándar define 128 posiciones numeradas del 0 al 127. Cada posición se representa con 7 bits, lo justo para cubrir letras mayúsculas y minúsculas del inglés, números del 0 al 9, signos de puntuación básicos, símbolos matemáticos sencillos y una serie de códigos de control no imprimibles pensados para teletipos, impresoras y protocolos de comunicación.
Como los ordenadores trabajan internamente con bytes de 8 bits, el código ASCII se suele almacenar en un octeto, dejando el bit más alto a 0. Ese bloque de 128 caracteres se ha mantenido intacto en Unicode, de manera que los primeros 128 puntos de código de Unicode coinciden exactamente con los de ASCII. Eso garantiza compatibilidad hacia atrás con ficheros de texto, APIs y protocolos que nacieron usando US-ASCII.
Cuando veas referencias a ASCII en manuales o especificaciones técnicas, casi siempre están hablando de US-ASCII, la versión de 7 bits estandarizada por ANSI y luego reflejada en otros organismos como ISO (ISO 646), ECMA (ECMA-6) o la UIT (recomendación T.50). Es el mínimo común denominador de texto en prácticamente cualquier sistema informático.
Un poco de historia: de la telegrafía a Internet
Para entender bien ASCII hay que situarse en los años 60, cuando la telegrafía y las teleimpresoras eran la forma habitual de transmitir texto a distancia. Cada fabricante usaba su propio juego de códigos; existían códigos como Baudot o Fieldata, pero no había un estándar único que todos respetaran.
En 1963, el Comité Estadounidense de Estándares (ASA, hoy ANSI) impulsó la creación de un código unificado. Robert W. Bemer y otros ingenieros lideraron el diseño de ASCII como evolución de esos códigos telegráficos, reorganizando los caracteres para que resultara más cómodo ordenar listas alfabéticamente, incorporar letras minúsculas y disponer de un conjunto coherente de códigos de control.
La primera versión de ASCII publicada en 1963 todavía no tenía el aspecto actual: algunos símbolos eran distintos (por ejemplo, una flecha hacia arriba en lugar del circunflejo ^, y una flecha hacia la izquierda donde ahora está el guion bajo). En 1967 se revisó el estándar, se añadieron definitivamente las minúsculas y se reubicaron ciertos códigos de control como ACK y ESC para dejar el conjunto tal y como lo conocemos hoy.
A partir de ahí, ANSI fue refinando el estándar con versiones como ANSI X3.4-1968, ANSI X3.4-1977 y ANSI X3.4-1986, que es la base de US-ASCII moderno. Otros organismos simplemente clonaron esa definición: ISO con ISO/IEC 646, ECMA con ECMA-6, la UIT con la recomendación T.50 e incluso IBM con su página de códigos 367.
Con la expansión de la informática personal y de Internet, ASCII se convirtió en el lenguaje común para el intercambio de texto: correos electrónicos, protocolos como SMTP o FTP, ficheros .txt, documentación técnica, mensajes entre dispositivos en serie… prácticamente todo se apoyaba en este conjunto compacto de 7 bits.
Estructura del código ASCII: control, texto y símbolos
El diseño de ASCII no es arbitrario: los 128 valores se agrupan en zonas lógicas que facilitan la implementación de hardware y software, y permiten conversiones rápidas entre mayúsculas, minúsculas, dígitos y otros símbolos.
En líneas generales, el estándar se divide así:
- Códigos de control (0-31 y 127): caracteres no imprimibles utilizados para gestionar dispositivos o delimitar datos.
- Caracteres imprimibles básicos (32-126): espacio, símbolos de puntuación, dígitos, letras mayúsculas y minúsculas, signos matemáticos y otros símbolos.
- Zona reservada para usos extendidos cuando se trabaja con 8 bits (128-255) en páginas de códigos compatibles, aunque estrictamente eso ya es “ASCII extendido”.
Aunque a primera vista pueda parecer un galimatías de números, la tabla ASCII tiene patrones muy claros. Por ejemplo, los dígitos 0-9 van del 48 al 57, las mayúsculas A-Z del 65 al 90, y las minúsculas a-z del 97 al 122, con diferencias de bits que simplifican mucho las operaciones de conversión en código.
Caracteres de control (0-31 y 127)
Los primeros 32 códigos, junto con el 127, se reservaron para funciones de control en líneas de comunicación, impresoras, cintas y otros dispositivos. No se imprimen como texto normal; su efecto es cambiar el comportamiento de la transmisión o del terminal.
Algunos ejemplos representativos dentro de esta zona son:
- 0 - NUL (Carácter nulo): marca de relleno o fin de cadena en muchos lenguajes (la famosa ASCIIZ o cadena terminada en cero).
- 7 - BEL (Timbre): originariamente hacía sonar un bip en el terminal.
- 8 - BS (Retroceso): mueve el cursor una posición hacia atrás.
- 9 - HT (Tabulación horizontal): salto de tabulación, el típico “tab”.
- 10 - LF (Line feed): avance de línea, muy usado en Unix como fin de línea.
- 13 - CR (Carriage return): retorno de carro, clásico en sistemas tipo Windows combinado como CR+LF.
- 24-27 - CAN, EM, SUB, ESC: usados para cancelar, marcar fin de medio, sustituir datos corruptos o activar secuencias de escape.
- 28-31 - FS, GS, RS, US: separadores de archivo, grupo, registro y unidad, pensados para estructurar datos.
- 127 - DEL (Delete): todos los bits a 1, utilizado para “borrar” posiciones en papel perforado llenando todos los agujeros de una columna.
En los primeros tiempos de la informática y las telecomunicaciones, estos códigos de control eran indispensables para marcar paquetes de datos, controlar el flujo o formatear texto. Hoy su uso ha disminuido mucho, pero siguen vivos algunos como CR, LF, TAB o las combinaciones XON/XOFF (control de flujo software con DC1/DC3).
Caracteres imprimibles (32-126)
A partir del valor 32 entramos en la zona visible de la tabla. El código 32 es el espacio en blanco, y a partir de ahí aparecen signos de puntuación, dígitos, letras y otros símbolos que usamos a diario.
Por bloques, la organización más destacada es esta:
- 32: espacio.
- 33-47: signos como ! " # $ % & ' ( ) * + , - . /.
- 48-57: dígitos del 0 al 9 (prefijados con 0011 en binario).
- 58-64: : ; < = > ? @.
- 65-90: letras mayúsculas A-Z.
- 91-96: ^ _ `.
- 97-122: letras minúsculas a-z.
- 123-126: { | } ~.
En binario, las mayúsculas y minúsculas sólo difieren en un bit, lo que facilita operaciones como pasar de una a otra sin tablas complejas. Del mismo modo, convertir un dígito BCD a ASCII es casi directo: basta con anteponerle el prefijo 0011 al valor binario de 0-9.
ASCII extendido y páginas de código de 8 bits
El ASCII “puro” es un código de 7 bits. Sin embargo, cuando la tecnología empezó a explotar el octavo bit de cada byte, se abrió la puerta a 128 posiciones adicionales (128-255) para añadir caracteres propios de otros idiomas y símbolos gráficos.
Ahí nacen lo que solemos llamar ASCII extendido: conjuntos de 8 bits que respetan los primeros 128 caracteres idénticos a US-ASCII y aprovechan el rango 128-255 para cosas como letras acentuadas, símbolos de moneda, caracteres de pseudográficos para dibujar cuadros, signos matemáticos avanzados, etc.
Es importante remarcar que no existe un único ASCII extendido. Cada página de código define su propia asignación para esos 128 códigos superiores. Algunos ejemplos conocidos son:
- ISO/IEC 8859-1 (Latin-1): muy usado en Europa occidental, incluye ñ, acentos, diéresis y símbolos como ¢, £, §.
- Windows-1252: similar a ISO-8859-1 pero con diferencias en el rango 128-159, popular en sistemas Windows.
- Código de página 437 de IBM: clásico de MS-DOS, con caritas sonrientes y trazos de pseudográficos para interfaces de texto.
- Mac OS Roman: juego de caracteres usado tradicionalmente en sistemas Macintosh.
Esta diversidad de páginas de código hace que un mismo número (por ejemplo 164) no signifique siempre el mismo símbolo si cambia la tabla que está usando el sistema. Por eso a veces ves caracteres raros o “mojibake” cuando abres ficheros con la codificación equivocada.
Hoy en día, para evitar estos problemas se prefiere usar Unicode en codificaciones como UTF‑8, que proporcionan un repertorio prácticamente universal. Aun así, el tramo 0-127 sigue coincidiendo siempre con ASCII, de modo que todo lo basado únicamente en esos códigos continúa siendo totalmente compatible.
ASCII, binario y decimal: cómo se representan los caracteres
En última instancia, un ordenador sólo entiende secuencias de bits (0 y 1). ASCII no es más que la convención que enlaza esas secuencias con símbolos humanos como “A”, “3” o “&”. Cada carácter se puede expresar en binario, decimal o hexadecimal, según convenga.
Algunos ejemplos típicos en ASCII estándar son:
- Letra “A”: decimal 65, binario 0100 0001, hexadecimal 41.
- Letra “C”: decimal 67, binario 0100 0011.
- Letra “K”: decimal 75, binario 0100 1011.
- Letra “k”: decimal 107, binario 0110 1011.
- Letra “X”: decimal 88, binario 0101 1000.
- Letra “x”: decimal 120, binario 0111 1000.
- Carácter “!”: decimal 33, binario 0010 0001.
- Carácter “#”: decimal 35, binario 0010 0011.
- Carácter “/”: decimal 47, binario 0010 1111.
- Carácter “=”: decimal 61, binario 0011 1101.
- Carácter “:”: decimal 58, binario 0011 1010.
- Carácter “,”: decimal 44, binario 0010 1100.
- Carácter “.”: decimal 46, binario 0010 1110.
- Carácter “”: decimal 93, binario 0101 1101.
- Dígito “0”: decimal 48, binario 0011 0000.
- Dígito “6”: decimal 54, binario 0011 0110.
- Dígito “9”: decimal 57, binario 0011 1001.
- Signo “+”: decimal 43, binario 0010 1011.
- Signo “-”: decimal 45, binario 0010 1101.
Gracias a esta correspondencia, se pueden plantear tareas como convertir binario en texto ASCII y al revés siguiendo siempre el mismo procedimiento. Por ejemplo, si tienes la cadena binaria:
01000001 01000010 01000011
Los pasos serían:
- Agrupar en bytes de 8 bits: 01000001, 01000010, 01000011.
- Pasar cada grupo a decimal: 65, 66, 67.
- Mirar la tabla ASCII estándar: 65 → “A”, 66 → “B”, 67 → “C”.
- Concatenar los caracteres en el orden correcto: "ABC".
Es importante comprobar que todos los valores estén entre 0 y 127 si estás trabajando con ASCII puro. Si aparecen números por encima de 127 o símbolos extraños, probablemente el texto está en alguna variante de ASCII extendido, ISO-8859-1, Windows-1252 o una codificación Unicode como UTF‑8.
ASCII y el teclado: códigos ALT, escritura y tablas
Una de las formas más directas de ver ASCII en acción es el teclado. Cada vez que pulsas una tecla, el dispositivo genera un código que el sistema operativo traduce a un carácter concreto, y en muchos entornos esa traducción está basada en US-ASCII o en una extensión compatible.
En Windows, por ejemplo, se pueden introducir muchos símbolos mediante los famosos códigos ALT. La idea es mantener pulsada la tecla Alt, escribir un número en el teclado numérico y soltarla para insertar el carácter asociado a ese valor según la página de código activa.
Algunos atajos típicos con el teclado numérico son:
- Alt + 35: #
- Alt + 36: $
- Alt + 37: %
- Alt + 38: &
- Alt + 64: @
- Alt + 164 (en muchas configuraciones): ñ minúscula.
- Alt + 165: Ñ mayúscula en algunos juegos de caracteres.
- Alt + 209: también Ñ mayúscula según la página de código.
Aquí entra en juego de nuevo el tema de las extensiones: los códigos Alt por encima de 127 no pertenecen al ASCII estándar, sino a páginas de código como Windows-1252. En macOS, en lugar de Alt se utiliza normalmente la tecla Option con combinaciones específicas, o el visor de caracteres.
Si quieres trastear con símbolos especiales sin aprendértelos de memoria, puedes usar herramientas del sistema como el Mapa de caracteres de Windows o equivalentes en otros sistemas, que muestran el símbolo, su código y, en muchos casos, la combinación Alt asociada.
ASCII en programación y desarrollo de software
En programación, ASCII es ubicuo. Incluso cuando se usa Unicode, muchas operaciones básicas con texto siguen apoyándose en los rangos ASCII para validar entradas, filtrar caracteres, ordenar cadenas o interpretar protocolos.
En la mayoría de lenguajes de alto nivel existen funciones para convertir un carácter a su código numérico y viceversa. En Python, por ejemplo, se utilizan las funciones ord() y chr():
caracter = 'A'
codigo_ascii = ord(caracter)
print("El código ASCII de", caracter, "es", codigo_ascii)
En Java algo similar se hace simplemente convirtiendo el carácter a entero:
char caracter = 'A';
int codigoAscii = (int) caracter;
System.out.println("El código ASCII de " + caracter + " es " + codigoAscii);
Además de estas conversiones básicas, ASCII aparece en numerosos contextos de desarrollo:
- Manipulación de cadenas: comprobar si un carácter está entre 'A' y 'Z', o entre '0' y '9', validar que una contraseña sólo contiene ASCII imprimible, normalizar mayúsculas y minúsculas, etc.
- Entidades HTML y URLs: en la web, se usan entidades como < para el carácter < o escapes de porcentaje en URLs. Debajo de todo eso se siguen manejando códigos numéricos muy próximos a ASCII estándar.
- Protocolos clásicos: SMTP, FTP, HTTP en sus orígenes y multitud de protocolos industriales se basan en texto ASCII sencillo para los comandos y cabeceras.
- Archivos de texto plano: ficheros .txt, muchos logs, configuraciones antiguas y formatos de datos minimalistas usan sólo el rango 0-127.
- Códigos de control en bajo nivel: caracteres como CR, LF, BEL o los separadores FS/GS/RS/US se siguen usando en ciertos sistemas embebidos, terminales o protocolos seriales.
- Compatibilidad con sistemas legacy: bases de datos antiguas, mainframes, aplicaciones heredadas y dispositivos industriales todavía esperan datos en ASCII o en extensiones de 8 bits como ISO-8859-1 o CP437.
Todo esto hace que, pese a su edad, ASCII siga siendo una pieza fundamental de la infraestructura digital. Saber leer una tabla ASCII y moverte con soltura entre decimal, hexadecimal y binario te ahorra tiempo cada vez que te peleas con cadenas mal codificadas o dispositivos que se comportan de forma extraña.
Conversión entre ASCII y texto: del byte a la letra
A nivel práctico, una de las operaciones más habituales es traducir secuencias de números a texto legible y viceversa. Esta conversión es directa si respetas siempre la misma tabla y el mismo rango de valores.
Cuando codificas texto a ASCII estándar, cada carácter se sustituye por su correspondiente entero 0-127. En muchos lenguajes, las cadenas de texto en C clásico se almacenan como secuencias de códigos ASCII terminadas con un NUL (0), lo que dio lugar al término ASCIIZ o ASCIZ (ASCII + zero-terminated).
En el sentido contrario, cuando recibes un flujo de bytes y sabes que es ASCII, basta con:
- Leer de 8 en 8 bits (un byte) si te llega en binario.
- Pasar cada byte a decimal para obtener el número ASCII.
- Consultar la tabla de equivalencias para encontrar el carácter correspondiente.
- Concatenar respetando espacios y saltos de línea, ya que también son códigos ASCII y alteran totalmente el texto si los pierdes.
En ASCII estándar, el bit más alto del byte suele ser 0. Si empiezas a ver valores fuera del rango 0-127, símbolos raros o simplemente el texto no tiene sentido, conviene revisar la codificación real del origen: puede estar en UTF‑8, Latin‑1, Windows‑1252 o cualquier otra variante.
Características clave y limitaciones del código ASCII
Después de todo este repaso, se puede hacer una radiografía bastante clara de las ventajas y desventajas del código ASCII en el contexto actual.
Entre sus puntos fuertes destacan:
- Simplicidad: usa 7 bits y sólo 128 posiciones, lo que hace la tabla fácil de memorizar y de implementar en hardware y software.
- Compatibilidad masiva: prácticamente cualquier sistema entiende US-ASCII, desde microcontroladores hasta grandes servidores.
- Base de otros estándares: Unicode, ISO 8859, muchas páginas de código de 8 bits y hasta determinados formatos binarios conservan intacto el rango 0-127.
- Eficiencia en entornos con pocos recursos, donde un juego de caracteres pequeño es más que suficiente.
Sin embargo, sus limitaciones son evidentes en un mundo globalizado:
- Sólo cubre el alfabeto inglés, dígitos y símbolos básicos, sin soporte nativo para acentos, eñes ni alfabetos no latinos.
- No puede representar directamente caracteres acentuados, ni letras propias de muchos idiomas (ñ, ç, á, ä, etc.).
- Carece de símbolos gráficos complejos, ideogramas, emojis o escrituras como árabe, chino, japonés o cirílico.
- Se queda corto para aplicaciones modernas que necesitan un repertorio mucho más amplio, como interfaces multilingües, mensajería instantánea o documentos internacionales.
Por todo ello, a medida que crecía la necesidad de representar más lenguas y símbolos, ASCII fue quedándose pequeño y se vio superado por estándares como Unicode y el UCS (ISO/IEC 10646). Aun así, su legado persiste como subconjunto fundamental y como referencia histórica que todavía condiciona la forma en la que codificamos texto.
Unicode y otros sucesores: el papel de ASCII hoy
Para resolver las carencias de ASCII y de las múltiples extensiones incompatibles entre sí, la comunidad internacional desarrolló Unicode y el Conjunto de Caracteres Universal (UCS), que definen un espacio de código capaz de cubrir prácticamente todas las escrituras del planeta.
En Unicode, cada carácter tiene un punto de código, un número entero que se representa en distintas codificaciones físicas (UTF‑8, UTF‑16, UTF‑32, etc.). Para garantizar la compatibilidad, los primeros 128 puntos de código de Unicode coinciden con US‑ASCII, de tal forma que cualquier texto puramente ASCII es también texto Unicode válido.
La codificación UTF‑8, que es la reina absoluta en la web, utiliza:
- Un byte por carácter para los valores 0-127 (que son exactamente ASCII).
- Secuencias de 2 a 4 bytes para representar el resto de símbolos, incluidos acentos, caracteres no latinos, emojis, etc.
Otras codificaciones como UTF‑16 también guardan la compatibilidad conceptual con ASCII en el rango bajo, pero utilizan 16 o más bits por carácter, por lo que suelen requerir conversión si vas a hablar directamente con sistemas pensados para 7 u 8 bits.
En este escenario, ASCII puede verse como un subconjunto muy pequeño de Unicode. Sin embargo, su influencia va más allá de esos 128 caracteres: nombres como US-ASCII o ASCII siguen apareciendo en cabeceras HTTP (Content-Type), metadatos HTML, cabeceras MIME, documentación de APIs y especificaciones de protocolos.
ASCII y arte: iconos, dibujos y creatividad con texto
Más allá del lado técnico, el código ASCII ha dado lugar a una pequeña disciplina artística: el arte ASCII. Aprovechando los 95 caracteres imprimibles de la tabla, es posible componer imágenes utilizando únicamente texto monoespaciado.
Seguro que has visto más de una vez combinaciones como 🙂 o <3 para representar emociones o símbolos sencillos. A partir de ahí, la cosa puede complicarse todo lo que quieras. Con unas pocas líneas es posible dibujar pequeñas figuras:
- Cara sonriente: 🙂
- Gato: =^.^=
- Pez: ><(((('>
Y si te animas, puedes levantar composiciones de varias líneas. Por ejemplo, un árbol de Navidad muy básico con asteriscos y barras verticales se puede montar con unas cuantas filas de texto. A escala más grande, existen herramientas que convierten imágenes o incluso vídeos en arte ASCII, como la librería libre Aalib, utilizada por algunos programas, juegos y reproductores.
En el ámbito del desarrollo, muchos programadores aprovechan esta técnica para crear cabeceras decorativas en el código fuente o en la documentación, sabiendo que cualquier editor de texto monoespaciado las mostrará correctamente aunque no soporte gráficos.
Preguntas frecuentes sobre el código ASCII
¿Cuántos caracteres tiene el código ASCII?
El ASCII estándar define 128 caracteres, numerados del 0 al 127. Dentro de ese rango hay 33 posiciones dedicadas a caracteres de control (0-31 y 127) y 95 caracteres imprimibles (32-126). Cuando se habla de ASCII extendido o de juegos de 8 bits, el total se amplía a 256, pero ahí ya entran en juego páginas de código concretas que no forman parte del estándar original de 7 bits.
¿Cómo se escribe o se representa un carácter ASCII?
Cada carácter ASCII se puede representar de dos formas principales: mediante el propio símbolo (por ejemplo, "A") o mediante su código numérico (65 en decimal, 41 en hexadecimal, 01000001 en binario). En programación es habitual usar funciones como ord() y chr() o escapes numéricos en distintas bases. En la web, aparecen entidades HTML numéricas (como < para <), y en Windows se pueden teclear caracteres mediante códigos Alt en el teclado numérico.
¿Sigue teniendo sentido usar una tabla ASCII hoy?
Aunque pueda parecer algo del pasado, la tabla ASCII sigue siendo muy útil para tareas como interpretar logs, analizar bytes en un protocolo antiguo, depurar problemas de codificación, validar entradas de usuario o entender por qué un archivo de texto se ve mal en cierto editor. El tramo 0-127 continúa siendo la base inamovible de Unicode, así que tener a mano la tabla te permite traducir en pocos segundos un valor numérico a su carácter correspondiente y detectar rápidamente anomalías.
¿Qué hace exactamente Alt 164 o Alt 165?
En muchas configuraciones de Windows con páginas de código de Europa occidental, Alt 164 inserta la letra “ñ” minúscula y Alt 165 o Alt 209 la “Ñ” mayúscula. Estos valores no forman parte del ASCII estándar de 7 bits, sino de extensiones de 8 bits como Windows‑1252 o ISO‑8859-1. Por eso, si cambias de página de códigos, esos mismos números pueden producir otro símbolo o no funcionar como esperabas.
Visto todo lo anterior, el código ASCII es mucho más que una curiosidad histórica: es el cimiento sobre el que se ha construido casi toda la representación de texto en la informática moderna. Conocer su origen, su estructura, sus límites y su relación con Unicode te da contexto para entender por qué algunos sistemas se quejan de “caracteres no válidos”, por qué aparecen símbolos corruptos al abrir ciertos ficheros o por qué un simple salto de línea puede cambiar el comportamiento de un programa. Y una vez interiorizas su lógica, manejarte con tablas de códigos, binario, hexadecimal y codificaciones deja de ser un dolor de cabeza para convertirse en una herramienta más en tu día a día.
[relacionado url="https://internetpasoapaso.com/glosario-de-informatica/"]













