ASCII - American Standard Code for Information Interchange

Quienes trabajan con el Procesamiento Electrónico de Datos (PED) y con Internet es probable que ya conozcan el acrónimo ASCII, pero ¿qué significa? El término hace referencia a una codificación fija de caracteres que asigna determinados códigos a caracteres imprimibles como letras, números y signos de puntuación y a caracteres de control no imprimibles. La codificación ASCII se utiliza para definir la forma como los dispositivos electrónicos, como ordenadores o smartphones, representan visualmente estos caracteres. Esto es un componente muy importante del trabajo del programador, pero el usuario de a pie también puede encontrar útil comprender cómo funcionan los caracteres ASCII. Para consultar los caracteres cada vez que lo necesites, te presentamos también una práctica tabla de ASCII.

Definición

El código ASCII hace referencia al American Standard Code for Information Interchange y, con ello, al precursor estadounidense de ISO 646 (conjunto de caracteres internacional). ASCII es un código de 7 bits con 128 caracteres (27) definidos, pero además cuenta con 33 caracteres no imprimibles y 95 imprimibles y comprende tanto letras, signos de puntuación y números como caracteres de control.

Breve historia de la codificación ASCII

La American Standards Association (ASA, más conocida en la actualidad como ANSI por American National Standards Institute) aprueba el American Standard Code for Information Interchange (ASCII) ya en el año 1963, contribuyendo así con indicaciones obligatorias a la forma en que los dispositivos electrónicos han de representar los diversos caracteres. Debido a que se trata de un estándar puramente estadounidense, a veces también se habla de él como US ASCII. Algunos de sus predecesores son el código morse o las codificaciones utilizadas en el télex o teletipo: un código estandarizado (por ejemplo, una sucesión determinada de señales acústicas) que se traduce en texto. La codificación ASCII se creó porque los ordenadores no pueden comprender nuestro alfabeto, pues sus procesos internos se basan en el sistema binario.

Hasta hoy, el código ASCII solo se ha modificado en contadas ocasiones para adaptarse a las nuevas exigencias. Existen versiones ampliadas que, por ejemplo, utilizan un octavo bit para representar unidades nacionales, como es el caso de los símbolos diacríticos como los acentos del español o del francés. La norma Latin-1 (ISO 88591-1), necesaria para algunos idiomas de Europa occidental, se basa en los caracteres ASCII. Cambiar de un alfabeto a otro no es posible, lo que ha hecho que se hayan impuesto códigos basados en Unicode como UTF-8, pues tiene capacidad para más de un millón de caracteres diferentes. Además, es compatible con ASCII y codifica los primeros 128 caracteres.

¿Qué es el código ASCII?

ASCII es un estándar para la representación de caracteres en dispositivos electrónicos. Para entender lo que significa es necesario conocer cómo funciona un ordenador: en él los procesos de cálculo se basan siempre en el sistema binario, lo que significa que ceros y unos determinan las operaciones. Por ello, ASCII se erige sobre este sistema. El estándar ASCII original define diversos caracteres en siete bits, es decir, siete posiciones que muestran 0 o 1. El octavo bit, que pertenece a un byte completo, se utiliza normalmente para los análisis. Las versiones ampliadas basadas en el American Standard Code for Information Interchange emplean dicho bit para incrementar los caracteres existentes a 256 (28).

Así, a cada carácter le corresponde una secuencia de 7 cifras formada por ceros y unos, que pueden aparecer como números decimales o hexadecimales. Los caracteres ASCII se reparten en varios grupos:

  • Caracteres de control (0–31 & 127): los caracteres de control no son caracteres imprimibles. Estos transmiten comandos al PC o a la impresora y se basan en técnicas de teletipo. Con ellos también se pueden colocar saltos de línea o tabuladores, aunque muchos apenas se utilizan en la actualidad.  
  • Caracteres especiales (32–47 / 58–64 / 91–96 / 123–126): estos comprenden todos los imprimibles que no son ni letras ni números, como, por ejemplo, los signos de puntuación o los símbolos matemáticos. También se incluye el espacio en blanco, que es considerado como carácter imprimible pero no visible y, por lo tanto, no pertenece a los caracteres de control como se podría suponer.
  • Números (30–39): los números engloban las diez cifras árabes del cero al nueve.
  • Letras (65–90 / 97–122): las letras se dividen en dos bloques, el primero para las mayúsculas y el segundo para las minúsculas.
Hecho

En un principio, el octavo bit fue concebido para comprobar la presencia de errores en los datos. El denominado bit de paridad permite que el receptor de la cadena de bits identifique posibles incongruencias. Sin embargo, solo puede saberse que ha ocurrido un error, pero no a qué se debe. Por ello, la comprobación de la paridad no resulta muy adecuada para corregir errores.

Tabla ASCII: un resumen de todos los caracteres ASCII

Habitualmente, en las tablas ASCII los valores se representan de un modo decimal, binario y hexadecimal. Los primeros dos tipos se recogen debido a que, en general, son sistemas de caracteres usados tanto por humanos como por máquinas. Por el contrario, el sistema hexadecimal tiene la ventaja de que comprende 16 caracteres (0–9 + A–F) y puede representar números grandes con menos posiciones que las otras dos variantes. Así, un byte siempre puede representarse con máximo 2 cifras.

Bin. Hex. Dec. Código ASCII Explicación Grupo
0000000 0 0 NUL El carácter nulo exhorta al dispositivo a que no haga nada (Null) Caracteres de control
0000001 1 1 SOH Inicia un encabezado (Start of Heading) Caracteres de control
0000010 2 2 STX Concluye el encabezado y señala el inicio de un mensaje (Start of Text) Caracteres de control
0000011 3 3 ETX Muestra el final del mensaje (End of Text) Caracteres de control
0000100 4 4 EOT Marca el final de toda la transmisión (End of Transmission) Caracteres de control
0000101 5 5 ENQ Una consulta que solicita una respuesta (Enquiry) Caracteres de control
0000110 6 6 ACK Ofrece una respuesta positiva a una consulta (Acknowledge) Caracteres de control
0000111 7 7 BEL Produce una señal de audio (Bell) Caracteres de control
0001000 8 8 BS Permite retroceder un paso con el cursor (Backspace) Caracteres de control
0001001 9 9 TAB (HT) Tabulador horizontal que mueve el cursor en una línea hacia la siguiente posición predefinida (Horizontal Tab) Caracteres de control
0001010 A 10 LF Hace que el cursor salte a la línea siguiente (Line Feed) Caracteres de control
0001011 B 11 VT El tabulador vertical hace que el cursor salte a una línea predefinida (Vertical Tab) Caracteres de control
0001100 C 12 FF Solicita un salto de página (Form Feed) Caracteres de control
0001101 D 13 CR Vuelve a poner el cursor en la primera línea (Carriage Return) Caracteres de control
0001110 E 14 SO Cambia a una representación especial (Shift Out) Caracteres de control
0001111 F 15 SI Hace que la representación vuelva a su estado normal (Shift In) Caracteres de control
0010000 10 16 DLE Se modifica el significado de los siguientes caracteres (Data Link Escape) Caracteres de control
0010001 11 17 DC1 Caracteres de control que se asignan en función del dispositivo utilizado para desencadenar unas funciones específicas (Device Control) Caracteres de control
0010010 12 18 DC2 Caracteres de control que se asignan en función del dispositivo utilizado para desencadenar unas funciones específicas (Device Control) Caracteres de control
0010011 13 19 DC3 Caracteres de control que se asignan en función del dispositivo utilizado para desencadenar unas funciones específicas (Device Control) Caracteres de control
0010100 14 20 DC4 Caracteres de control que se asignan en función del dispositivo utilizado para desencadenar unas funciones específicas (Device Control) Caracteres de control
0010101 15 21 NAK Respuesta negativa a una consulta (Negative Acknowledge) Caracteres de control
0010110 16 22 SYN Sincroniza una transferencia de datos aunque no se transmita ninguna señal (Synchronous Idle) Caracteres de control
0010111 17 23 ETB Marca el final de un bloque de transmisión (End of Transmission Block) Caracteres de control
0011000 18 24 CAN Establece que una transmisión es incorrecta y se tienen que descartar los datos (Cancel) Caracteres de control
0011001 19 25 EM Muestra el final del dispositivo de almacenamiento (End of Medium) Caracteres de control
0011010 1A 26 SUB Sustituto para un carácter erróneo (Substitute) Caracteres de control
0011011 1B 27 ESC Inicia una secuencia de escape y otorga al carácter siguiente un significado especial (Escape) Caracteres de control
0011100 1C 28 FS Marca la separación de bloques de datos lógicos y tiene un orden jerárquico: File como unidad mayor, Unit como unidad menor (File Separator, Group Separator, Record Separator, Unit Separator) Caracteres de control
0011101 1D 29 GS Marca la separación de bloques de datos lógicos y tiene un orden jerárquico: File como unidad mayor, Unit como unidad menor (File Separator, Group Separator, Record Separator, Unit Separator) Caracteres de control
0011110 1E 30 RS Marca la separación de bloques de datos lógicos y tiene un orden jerárquico: File como unidad mayor, Unit como unidad menor (File Separator, Group Separator, Record Separator, Unit Separator) Caracteres de control
0011111 1F 31 US Marca la separación de bloques de datos lógicos y tiene un orden jerárquico: File como unidad mayor, Unit como unidad menor (File Separator, Group Separator, Record Separator, Unit Separator) Caracteres de control
0100000 20 32 SP Espacio (Space) Caracteres especiales
0100001 21 33 ! Signo de exclamación Caracteres especiales
0100010 22 34 " Comillas dobles, comillas altas Caracteres especiales
0100011 23 35 # Almohadilla Caracteres especiales
0100100 24 36 $ Símbolo del dólar Caracteres especiales
0100101 25 37 % Signo de porcentaje Caracteres especiales
0100110 26 38 & Et Caracteres especiales
0100111 27 39 ' Apóstrofe Caracteres especiales
0101000 28 40 ( Paréntesis izquierdo Caracteres especiales
0101001 29 41 ) Paréntesis derecho Caracteres especiales
0101010 2A 42 * Asterisco Caracteres especiales
0101011 2B 43 + Signo más Caracteres especiales
0101100 2C 44 , Coma Caracteres especiales
0101101 2D 45 - Signo menos, guión medio Caracteres especiales
0101110 2E 46 . Punto Caracteres especiales
0101111 2F 47 / Barra inclinada Caracteres especiales
0110000 30 48 0   Números
0110001 31 49 1   Números
0110010 32 50 2   Números
0110011 33 51 3   Números
0110100 34 52 4   Números
0110101 35 53 5   Números
0110110 36 54 6   Números
0110111 37 55 7   Números
0111000 38 56 8   Números
0111001 39 57 9   Números
0111010 3A 58 : Dos puntos Caracteres especiales
0111011 3B 59 ; Punto y coma Caracteres especiales
0111100 3C 60 < Menor que Caracteres especiales
0111101 3D 61 = Igual que Caracteres especiales
0111110 3E 62 > Mayor que Caracteres especiales
0111111 3F 63 ? Cierre de interrogación Caracteres especiales
1000000 40 64 @ Arroba Caracteres especiales
1000001 41 65 A   Mayúsculas
1000010 42 66 B   Mayúsculas
1000011 43 67 C   Mayúsculas
1000100 44 68 D   Mayúsculas
1000101 45 69 E   Mayúsculas
1000110 46 70 F   Mayúsculas
1000111 47 71 G   Mayúsculas
1001000 48 72 H   Mayúsculas
1001001 49 73 I   Mayúsculas
1001010 4A 74 J   Mayúsculas
1001011 4B 75 K   Mayúsculas
1001100 4C 76 L   Mayúsculas
1001101 4D 77 M   Mayúsculas
1001110 4E 78 N   Mayúsculas
1001111 4F 79 O   Mayúsculas
1010000 50 80 P   Mayúsculas
1010001 51 81 Q   Mayúsculas
1010010 52 82 R   Mayúsculas
1010011 53 83 S   Mayúsculas
1010100 54 84 T   Mayúsculas
1010101 55 85 U   Mayúsculas
1010110 56 86 V   Mayúsculas
1010111 57 87 W   Mayúsculas
1011000 58 88 X   Mayúsculas
1011001 59 89 Y   Mayúsculas
1011010 5A 90 Z   Mayúsculas
1011011 5B 91 [ Corchete izquierdo Caracteres especiales
1011100 5C 92 \ Barra invertida (“backslash”) Caracteres especiales
1011101 5D 93 ] Corchete derecho Caracteres especiales
1011110 5E 94 ^ Acento circunflejo Caracteres especiales
1011111 5F 95 _ Guión bajo Caracteres especiales
1100000 60 96 ` Acento grave (“backtick”) Caracteres especiales
1100001 61 97 a   Minúsculas
1100010 62 98 b   Minúsculas
1100011 63 99 c   Minúsculas
1100100 64 100 d   Minúsculas
1100101 65 101 e   Minúsculas
1100110 66 102 f   Minúsculas
1100111 67 103 g   Minúsculas
1101000 68 104 h   Minúsculas
1101001 69 105 i   Minúsculas
1101010 6A 106 j   Minúsculas
1101011 6B 107 k   Minúsculas
1101100 6C 108 l   Minúsculas
1101101 6D 109 m   Minúsculas
1101110 6E 110 n   Minúsculas
1101111 6F 111 o   Minúsculas
1110000 70 112 p   Minúsculas
1110001 71 113 q   Minúsculas
1110010 72 114 r   Minúsculas
1110011 73 115 s   Minúsculas
1110100 74 116 t   Minúsculas
1110101 75 117 u   Minúsculas
1110110 76 118 v   Minúsculas
1110111 77 119 w   Minúsculas
1111000 78 120 x   Minúsculas
1111001 79 121 y   Minúsculas
1111010 7A 122 z   Minúsculas
1111011 7B 123 { Llave izquierda Caracteres especiales
1111100 7C 124 l Barra vertical (“pipe”) Caracteres especiales
1111101 7D 125 } Llave derecha Caracteres especiales
1111110 7E 126 ~ Tilde, virgulilla Caracteres especiales
1111111 7F 127 DEL Elimina un carácter. Dado que este signo de control tiene los mismos dígitos en todas las posiciones, en la época de las cintas perforadas se podía anular otro carácter troquelando todas las posiciones. (Delete) Caracteres de control

El octavo bit (si se utiliza una versión ampliada; si no, tiene valor nulo) se asigna de forma diferente dependiendo del programa. En la mayoría de los casos se recurre a una posición adicional para cumplir con las unidades nacionales y los primeros 128 caracteres permanecen siempre en su forma original.

Ejemplo: conversión de caracteres ASCII

En ASCII, el sistema convierte a dígitos binarios en caracteres imprimibles y no imprimibles conforme a un estándar establecido, tal y como se muestra en la tabla anterior. Los usuarios pueden realizar estos procesos de cálculo incluso sin herramientas adicionales, pero para ello deben comprender cómo se hacen cálculos binarios o hexadecimales. En un sistema numérico, cada posición de una potencia se corresponde con una base determinada, que en el sistema decimal es 10 y que en los sistemas binarios y hexadecimales es 2 o 16. En este caso se multiplica el valor de la cifra por el valor de la posición.

Valor de las posiciones en el sistema decimal:

Sistema decimal

100

101

102

103

1

10

100

1000

Por lo tanto:

7304 = 7 * 10³ + 3 * 10² + 0 * 10¹ + 4 * 10⁰

En los otros dos sistemas funciona de forma análoga:  

Sistema binario

20

21

22

23

1

2

4

8

No obstante, solo hay dos cifras, de ahí:

1011 ≙1 * 2³ + 0 * 2² + 1 * 2¹ + 1 * 2⁰ = 11

Sistema hexadecimal

160

161

162

163

1

16

256

4096

Como hay 16 cifras, el resultado es:

F1A9 ≙ 15 * 16³ + 1 * 16² + 10 * 16¹ + 9 * 16⁰ = 61865

Con esta información, y la tabla ASCII, se pueden convertir secuencias de caracteres ASCII en cualquier sistema numérico. Veámoslo con el ejemplo “Digital”: 

“D” se corresponde en la tabla ASCII con el valor decimal 68, es decir:

68 = 1 * 2⁶ + 1 * 2² ≙ 1000100

68 = 4 * 16¹ + 4 * 16⁰ ≙ 44

“i” se corresponde con el valor decimal 105, es decir:

105 = 1 * 2⁶ + 1 * 2⁵ + 1 * 2³ + 1 * 2⁰ ≙ 1101001

105 = 6 * 16¹ + 9 * 16⁰ ≙ 69

“g” se corresponde con el valor decimal 103, es decir:

103 = 1 * 2⁶ + 1 * 2⁵ + 1 * 2² + 1 * 2¹ + 1 * 2⁰ ≙ 1100111

103 = 6 * 16¹ + 7 * 16⁰ ≙ 67

“i” se corresponde con el valor decimal 105, así que:

105 = 1 * 2⁶ + 1 * 2⁵ + 1 * 2³ + 1 * 2⁰ ≙ 1101001

105 = 6 * 16¹ + 9 * 16⁰ ≙ 69

“t” se corresponde con el valor decimal 116:

116 = 1 * 2⁶ + 1 * 2⁵ + 1 * 2⁴ + 1 * 2² ≙ 1110100

116 = 7 * 16¹ + 4 * 16⁰ ≙ 74

“a” se corresponde con el valor decimal 97:

97 = 1 * 2⁶ + 1 * 2⁵ + 1 * 2⁰ ≙ 1100001

97 = 6 * 16¹ + 1 * 16⁰ ≙ 61

“l” se corresponde con el valor decimal 108:

108 = 1 * 2⁶ + 1* 2⁵ + 1 * 2³ + 1 * 2² ≙ 1101100

108 = 6 * 16¹ + 12 * 16⁰ ≙ 6C

Por lo tanto, la palabra de ejemplo también puede representarse así:

Carácter D i g i t a l
Dec. 68 105 103 105 116 97 108
Bin. 1000100 1101001 1100111 1101001 1110100 1100001 1101100
Hex. 44 69 67 69 74 61 6C
Consejo

Windows permite introducir tanto caracteres Unicode como ASCII mediante atajos de teclado. Mantén pulsada la tecla Alt e introduce el valor decimal del carácter utilizando los números del teclado.

Código ASCII: utilidad y ámbitos de aplicación

La codificación ASCII se utiliza bastante en la actualidad, aunque UTF-8 también se ha vuelto muy importante para la representación de textos. A partir de 2008 aproximadamente, Unicode desbancó del primer puesto en la World Wide Web a la versión más antigua de la codificación de caracteres. La ventaja de UTF-8 es que el código es prácticamente compatible con las versiones anteriores: ASCII es un subconjunto de UTF-8, por lo que los primeros 128 caracteres son idénticos. Debido a que el American Standard Code for Information Interchange es considerado como un mínimo denominador común de la mayoría de las nuevas formas de comunicación, la antigua codificación sigue utilizándose en los correos electrónicos y los URL.

Hecho

Mientras tanto, los usuarios también pueden utilizar Unicode para crear emails. Además, los dominios pueden contener símbolos como la diéresis gracias a los nombres de dominios internacionalizados. Antes de enviarse, en ambos casos el texto tendrá que convertirse al formato ASCII, lo que sucede de forma automática, de modo que el usuario no es consciente de la conversión.

Asimismo, el código ASCII se utiliza desde hace tiempo más para fines artísticos que para fines técnicos. El ASCII Art es un arte que solo emplea caracteres imprimibles de la tabla de ASCII para crear imágenes, cuya gama va desde trazos pasando por sencillas líneas patrón hasta verdaderos cuadros. Los artistas ASCII se valen así de las diferentes luminosidades de los caracteres para representar incluso matices.