Tabla ASCII

Referencia completa de los 128 caracteres ASCII con códigos decimal, hexadecimal, octal y binario.

128 caracteres mostrados

Acerca de ASCII

El ASCII (American Standard Code for Information Interchange) es una norma de codificación de caracteres de 7 bits que define 128 caracteres. Publicada por primera vez en 1963, es la base de la mayoría de las codificaciones de caracteres modernas, incluido UTF-8.

Rangos de caracteres

¿Cuál es la diferencia entre ASCII y Unicode?

El ASCII define 128 caracteres en 7 bits. Unicode es un superconjunto que cubre más de 149 000 caracteres de todos los sistemas de escritura. Los primeros 128 puntos de código Unicode son idénticos a ASCII.

¿Cómo usar estos códigos en programación?

En JavaScript: String.fromCharCode(65) → «A». En Python: chr(65). En C: (char)65. Los valores hexadecimales funcionan con las secuencias de escape: \x41 = «A».

Cómo funciona

  1. Explora la tabla completa: los 128 caracteres ASCII aparecen en una cuadrícula ordenada por punto de código (del 0 al 127). Cada celda muestra el carácter visible (o su abreviatura para los códigos de control), el código decimal y los equivalentes en hexadecimal / octal / binario.
  2. Filtra por categoría: usa el menú desplegable para limitar a caracteres de control (0-31), caracteres imprimibles (32-126), letras, dígitos o símbolos. Útil cuando solo te interesa, pongamos, el bloque de puntuación.
  3. Busca: el cuadro de búsqueda busca por nombre de carácter («LF»), abreviatura o valor numérico (decimal o hexadecimal). Escribir 0x41, 65 o A lleva en todos los casos a la misma celda.
  4. Haz clic en una celda para copiar cualquiera de sus representaciones al portapapeles. Práctico cuando necesitas \x1B para un escape ANSI, 0x0A para un salto de línea de Unix o el decimal 32 para un espacio.

Breve historia del ASCII

El ASCII (American Standard Code for Information Interchange) fue propuesto por el ingeniero de IBM Bob Bemer al subcomité X3.2 de la American Standards Association en mayo de 1961, con el objetivo de sustituir la docena de códigos de caracteres incompatibles que se usaban entonces. La primera edición publicada fue ASA X3.4-1963; las letras minúsculas no llegaron hasta la revisión de 1967. La norma se ha ratificado varias veces desde entonces con el nombre de ANSI X3.4-1986, y constituye la base de toda codificación de caracteres moderna a través de su gemela internacional, ISO/IEC 646 (y la europea ECMA-6).

Para el uso en red, el ASCII quedó codificado en la RFC 20, «ASCII format for Network Interchange», publicada el 16 de octubre de 1969 y escrita por Vint Cerf en la UCLA. La recomendación de la RFC («ASCII de 7 bits incrustado en un byte de 8 bits cuyo bit de mayor peso es siempre 0») sigue siendo la forma en que todo lenguaje de programación y protocolo modernos conciben el texto plano. El Gobierno federal de EE. UU., por orden ejecutiva del presidente Lyndon B. Johnson en 1968, exigió la compatibilidad con ASCII en todos los ordenadores federales a partir del 1 de julio de 1969, lo que garantizó su adopción en toda la industria.

¿Por qué siete bits?

El comité X3.2 estaba atrapado entre dos opciones poco atractivas. Un código de 6 bits (usado por alfabetos telegráficos antiguos como el ITA2) no era fiable: un solo cambio de bit en una línea ruidosa podía descodificar mal todos los caracteres siguientes si caía justo en un bit de cambio. Un código de 8 bits parecía un derroche en una época de memoria cara y módems lentos. La solución de compromiso fueron 7 bits = 128 puntos de código, dejando el octavo bit libre para la paridad. Ajustar el bit de paridad de modo que cada byte tuviera un número total par (o impar) de bits a 1 detectaba el 100 % de los errores de transmisión de un solo bit, justo el problema que producían los acopladores acústicos y los cables serie de los años 1960.

A medida que las tasas de error bajaban y los módems se volvían más rápidos, el octavo bit se reutilizó. Varias páginas de códigos nacionales de «ASCII extendido» (Latin-1, Windows-1252, Mac Roman, KOI8-R, …) usaban los códigos 128-255 para letras acentuadas y caracteres de dibujo de recuadros, pero esas asignaciones eran mutuamente incompatibles y acabaron siendo desplazadas por Unicode y UTF-8.

La distribución: 128 puntos de código

7 bits = 27 = 128 códigos distintos, organizados como 33 caracteres de control (0-31 más DEL en 127) y 95 caracteres imprimibles (32-126):

IntervaloHexContenido
0-3100-1FCaracteres de control (NUL, BEL, BS, HT, LF, CR, ESC, FS-US, …)
3220SPACE, imprimible pero invisible
33-4721-2FPuntuación: ! " # $ % & ' ( ) * + , - . /
48-5730-39Dígitos 0-9
58-643A-40Más puntuación: : ; < = > ? @
65-9041-5AMayúsculas A-Z
91-965B-60Corchetes y acentos: [ \ ] ^ _ `
97-12261-7AMinúsculas a-z
123-1267B-7ELlaves y tilde: { | } ~
1277FDEL, «rub out» en cinta de papel perforada (binario 1111111)

Caracteres de control que todavía importan

La mayoría de los 33 caracteres de control surgieron como comandos de teletipo y de cinta de papel y hoy son curiosidades históricas. Unos cuantos siguen siendo esenciales en la informática cotidiana:

Las guerras de los finales de línea

Tres plataformas eligieron tres convenciones distintas, y el software lo lleva pagando desde entonces. El origen mecánico es la máquina de escribir y el teletipo, donde hacían falta dos acciones separadas: el retorno de carro devolvía el cabezal de impresión a la columna 1, y el avance de línea hacía avanzar el papel una línea. Cada sistema tomó decisiones distintas sobre si codificar esto como uno o dos bytes:

SOSalto de líneaBytesEscape
Unix / Linux / macOS modernoLF0x0A\n
Mac OS clásico (anterior a OS X)CR0x0D\r
Windows / DOSCRLF0x0D 0x0A\r\n

La mayoría de los protocolos de internet exigen CRLF: HTTP, SMTP, FTP, MIME y el Internet Message Format estándar lo especifican todos. La RFC 5322 es inequívoca: «CR and LF MUST only occur together as CRLF; they MUST NOT appear independently» en el cuerpo del mensaje. Dentro del código fuente, en cambio, la convención varía según el equipo, y por eso git incluye core.autocrlf: con true en Windows, git extrae los archivos como CRLF en el árbol de trabajo pero los almacena como LF en el repositorio, de modo que el mismo archivo fuente produce el mismo hash de blob en todas las plataformas. Una entrada .gitattributes como * text=auto es la alternativa a nivel de proyecto.

Secuencias de escape ANSI para el color del terminal

El carácter de escape (ESC, 0x1B) es el prefijo de las secuencias de escape ANSI que dan color a la salida del terminal. La norma es ECMA-48 (1976), reflejada después como ANSI X3.64 e integrada en ISO/IEC 6429. La gramática es ESC [ + parámetros + una letra final; la parte ESC [ se denomina introductor de secuencia de control (CSI) y se escribe de varias formas, \e[, \x1b[ o \033[, según el lenguaje. Códigos habituales de Select Graphic Rendition:

Así, printf '\033[1;31mERROR\033[0m' imprime «ERROR» en rojo y negrita y se restablece después. Todos los emuladores de terminal modernos (y la Windows Terminal desde 2019) los admiten.

ASCII frente a Unicode y UTF-8

El ASCII define 128 puntos de código; Unicode 16.0 (publicado en 2024) abarca más de 154.000. El puente crucial es UTF-8, la codificación de texto dominante en la web (usada por ~98 % de los sitios web en 2026): UTF-8 está diseñado de modo que cualquier byte ASCII de 7 bits (0x00-0x7F) codifica el mismo carácter que siempre, con el bit alto a cero. La consecuencia práctica es que todo archivo ASCII válido es también un archivo UTF-8 válido, idéntico byte a byte. Los puntos de código por encima de 127 se codifican como secuencias de varios bytes (de 2 a 4 bytes) con el bit alto activado en cada byte, lo que garantiza que los analizadores ASCII heredados nunca los confundan con caracteres ASCII.

ASCII en los lenguajes de programación habituales

LenguajeCódigo → carácterCarácter → código
JavaScriptString.fromCharCode(65)'A'.charCodeAt(0)
Pythonchr(65)ord('A')
C / C++(char)65(int)'A'
Java(char) 65(int) 'A'
Rustchar::from(65)'A' as u32
Gostring(rune(65))int('A')
Bash / shprintf '\x41'printf '%d' "'A"
HTML&#65; o &#x41;-
Codificación de URL%41 = «A», %20 = espacio-

El truco del bit de mayúsculas

Una propiedad pequeña pero elegante de la distribución ASCII: una letra mayúscula y su equivalente en minúscula difieren en exactamente un bit. A es 65 = 0100 0001; a es 97 = 0110 0001. Solo difiere el bit 5. Eso convierte la comparación sin distinción de mayúsculas en una única operación a nivel de bits: x | 0x20 fuerza minúsculas, x & 0xDF fuerza mayúsculas, ambas más rápidas que una tabla de búsqueda. Fue una decisión de diseño deliberada en la revisión de 1967 y es una de las razones por las que la distribución parece «aleatoria» en algunos puntos: codifica propiedades amigables con el hardware, no solo el orden alfabético.

Errores comunes

  1. Confundir el dígito 0 con el carácter de control NUL. NUL es el código 0; el carácter «0» es el código 48. Los dos no son intercambiables en ningún lenguaje de programación.
  2. Suponer que un byte es un carácter. Solo es cierto para el texto ASCII. El texto UTF-8 tiene caracteres de ancho variable, así que la longitud en bytes y el recuento de caracteres pueden diferir enormemente en las escrituras no latinas.
  3. Mezclar finales de línea dentro de un mismo archivo. Mezclar CR / LF / CRLF dentro del mismo archivo confunde a muchos analizadores y produce líneas en blanco fantasma o saltos de línea ausentes según qué sistema operativo lo abra.
  4. Error de desfase por uno al terminar cadenas en C. Olvidar que las cadenas necesitan un byte adicional para el NUL final es la vulnerabilidad original de desbordamiento de búfer.
  5. Suponer que el «ASCII extendido» es portátil. Los códigos 128-255 significan caracteres distintos en Latin-1, Windows-1252, KOI8-R, Mac Roman, etc. UTF-8 es la única opción moderna segura.
  6. ESC incrustado en entradas no confiables. Si registras datos proporcionados por el usuario en un terminal sin sanearlos, un atacante puede inyectar secuencias de escape ANSI que cambian el color, mueven el cursor o borran la pantalla, a veces ocultando contenido malicioso.

Preguntas frecuentes

¿Por qué DEL tiene el código 127 en lugar del 0?

Porque 127 en binario es 1111111: los siete bits a 1. Para borrar un carácter en una cinta de papel perforada, el operador retrocedía la cinta y pulsaba RUB OUT, lo que perforaba todos los agujeros existentes. Se suponía que el receptor debía ignorar cualquier byte que fuera todo unos, de modo que el carácter «borrado» se volvía invisible en las lecturas posteriores. La convención se heredó de códigos de teletipo anteriores.

¿Qué es el «ASCII extendido» y es seguro usarlo?

El ASCII estándar abarca los puntos de código 0-127 (7 bits). El «ASCII extendido» se refiere de forma imprecisa a las codificaciones de 8 bits que rellenan los puntos de código 128-255 con caracteres adicionales: Latin-1, Windows-1252, KOI8-R, Mac Roman y muchas otras. El truco: los caracteres adicionales significan cosas distintas en cada codificación. El nombre es técnicamente inexacto (esas páginas de códigos no son extensiones de la norma ASCII) y no son seguras entre sistemas. UTF-8 es el reemplazo moderno y portátil, y es retrocompatible con el intervalo original 0-127.

¿Por qué se considera «imprimible» el espacio (32) si no muestra nada?

Porque ocupa espacio horizontal en una línea impresa: hace avanzar el cabezal de impresión exactamente igual que una letra. Los caracteres de control, en cambio, cambian el estado del dispositivo sin producir salida visible (BEL pita, BS mueve el cabezal hacia atrás, LF hace avanzar el papel). La clasificación se basa en lo que el carácter hace en una impresora, no en si tiene un glifo.

¿Son CR y LF lo mismo que Intro en mi teclado?

En su mayor parte sí, pero el byte que genera tu teclado depende del sistema operativo. En Windows, pulsar Intro suele producir CRLF (0x0D 0x0A); en Linux y macOS moderno, solo LF (0x0A); en el Mac OS clásico anterior a X, solo CR (0x0D). Muchos editores lo normalizan al guardar según los finales de línea existentes del archivo o la convención de proyecto configurada.

¿Por qué están aquí los separadores de archivo/grupo/registro/unidad?

Se diseñaron para el almacenamiento en cinta orientado a registros en los años 1960: archivo > grupo > registro > unidad. En su mayor parte cayeron en desuso, pero han vuelto en dos lugares sorprendentes: la RFC 7464 «JSON Text Sequences» (tipo de medio application/json-seq) usa RS (0x1E) como prefijo para delimitar registros JSON transmitidos, y el separador de identificador de aplicación GS1 en los protocolos de códigos de barras del comercio minorista usa GS (0x1D).

¿Sigue siendo relevante el ASCII en 2026?

Mucho. Todo protocolo moderno que sea «basado en texto» (cabeceras HTTP, JSON, YAML, código fuente, argumentos de línea de comandos, variables de entorno, nombres de host DNS) opera dentro del intervalo ASCII. UTF-8 es la codificación dominante para texto arbitrario, pero los primeros 128 valores de byte de UTF-8 son exactamente ASCII, byte a byte. Conocer la tabla sigue siendo necesario para cualquier cosa, desde la codificación de URL hasta el color del terminal o la depuración de errores de codificación de texto.

Herramientas relacionadas

Convertidor de binario a texto Convertidor de base numérica Codificador / Decodificador de entidades HTML Buscador de códigos de tecla JavaScript