Si los computadores funcionan en binario, ¿cómo podemos almacenar letras y palabras? Para ello, asignamos números a los caracteres. Esto se conoce como codificación de caracteres.

Mirando el código hex de un documento de texto simple

Para entender cómo funciona la codificación de caracteres, vamos a crear un ejemplo sencillo. En primer lugar, asignemos los números 1-26 al alfabeto inglés:

1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z

Para escribir un mensaje codificado sencillo, sustituimos las letras por números. Por ejemplo, 8 5 12 12 15. Utilizando los números, hemos construido la palabra h e l l o.

Pero para capturar completamente el alfabeto inglés -incluyendo las letras mayúsculas y minúsculas, los números y la puntuación- necesitábamos más de 26 caracteres. Por ello, se creó el Código Estándar Americano para el Intercambio de Información (ASCII) como uno de los primeros estándares de codificación de caracteres para ordenadores.

Lo que aprenderás en este tutorial

  • Una breve historia de ASCII
  • Cómo traducir números decimales, binarios y hexadecimales a ASCII

Lecturas sugeridas

Hay algunos conceptos con los que es posible que quieras estar familiarizado antes de empezar a leer esta guía:

  • Binario – Saber cómo un ordenador almacena los números es útil para traducir esos números a caracteres.
  • Hexadecimal – El hexadecimal se utiliza a menudo para expresar los números binarios en grupos de 4 bits.
  • Instalar el IDE de Arduino – Arduino es una buena manera de intentar imprimir caracteres ASCII.

Historia

La American Standards Association (ASA), ahora el American National Standards Institute (ANSI), comenzó a trabajar en ASCII el 6 de octubre de 1960. El esquema de codificación tenía su origen en los códigos telegráficos de 5 bits inventados por Émile Baudot. Finalmente, el comité se decidió por un código de 7 bits para el ASCII.

Los 7 bits permiten 128 caracteres. Aunque sólo se eligieron los caracteres y símbolos del inglés americano para este conjunto de codificación, los 7 bits suponían una minimización de los costes asociados a la transmisión de estos datos (a diferencia, por ejemplo, de los 8 bits).

Los primeros 32 caracteres de ASCII eran caracteres de control reservados. Estos caracteres se utilizaban para transmitir instrucciones especiales a otros dispositivos, como las impresoras. Por ejemplo, un usuario podía avanzar una línea, borrar un carácter y, en algunos dispositivos, hacer sonar una campana (como en el Teletype Modelo 33 ASR).

La ASA publicó la primera versión de ASCII en 1963 y la revisó en 1967. La última actualización importante de la norma se produjo en 1986. El ASCII se utilizó por primera vez con fines comerciales en la red American Telephone & Telegraph (AT&T) TeletypeWriter Exchange (TWX) network.

Las teleimpresoras, como este Teletype Modelo 33 ASR, se utilizaban para enviar mensajes mecanografiados a una o más teleimpresoras a través de varios canales de comunicación (Imagen cortesía de Arnold Reinhold de Wikimedia Commons)

El 11 de marzo de 1968, el presidente Lyndon B. Johnson ordenó que todos los ordenadores del gobierno federal de EE.UU. debían ser compatibles con ASCII, consolidando así el lugar de ASCII en la historia de la informática estadounidense.

En aquella época existían otros esquemas de codificación, como el Alfabeto Telegráfico Internacional nº 2 (ITA2), pero ASCII se convirtió rápidamente en el estándar de codificación del inglés estadounidense. ASCII fue la codificación más común en Internet hasta que fue superada por UTF-8 en 2007.

Tabla ASCII

Para identificar el valor ASCII de un carácter, es habitual buscarlo en una tabla ASCII. La tabla ASCII asocia cada carácter con su valor asignado entre 0 y 127.

Caracteres de control

Los caracteres de control constituyen los primeros 32 caracteres de la tabla ASCII. Estos caracteres no están destinados a ser impresos, sino que se utilizan para enviar instrucciones de comando a otro dispositivo, como una impresora. Ten en cuenta que hemos incluido la representación octal de los caracteres ASCII en el caso de que esté trabajando con un sistema particularmente antiguo (como el PDP-8 de 12 bits).

DecBinOctHexCharDescription
00000 000000000NULnull
10000 000100101SOHstart of heading
20000 001000202STXstart of text
30000 001100303ETXend of text
40000 010000404EOTend of transmission
50000 010100505ENQenquiry
60000 011000606ACKacknowledge
70000 011100707BELbell
80000 100001008BSbackspace
90000 100101109TABhorizontal tab
100000 10100120ALFline feed, new line
110000 10110130BVTvertical tab
120000 11000140CFFform feed, new page
130000 11010150DCRcarriage return
140000 11100160ESOshift out
150000 11110170FSIshift in
160001 000002010DLEdata link escape
170001 000102111DC1device control 1
180001 001002212DC2device control 2
190001 001102313DC3device control 3
200001 010002414DC4device control 4
210001 010102515NAKnegative acknowledge
220001 011002616SYNsynchronous idle
230001 011102717ETBend of transmission block
240001 100003018CANcancel
250001 100103119EMend of medium
260001 10100321ASUBsubstitute
270001 10110331BESCescape
280001 11000341CFSfile separator
290001 11010351DGSgroup separator
300001 11100361ERSrecord separator
310001 11110371FUSunit separator
1270111 11111777FDELdelete

Caracteres imprimibles

Hay 95 caracteres imprimibles en el esquema de codificación ASCII. Ten en cuenta que el carácter “espacio” denota un espacio imprimible (” “).

Inténtalo

Si quieres intentar imprimir algo utilizando la codificación ASCII, puedes probarlo utilizando Arduino. Consulta este tutorial para empezar con Arduino.

Abre el IDE de Arduino y pega el siguiente código:

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  Serial.write(0x48); // H
  Serial.write(0x65); // e
  Serial.write(0x6C); // l
  Serial.write(0x6C); // l
  Serial.write(0x6F); // o
  Serial.write(0x21); // !
  Serial.write(0x0A); // \n
  delay(1000);
}

Ejecútalo en tu Arduino, y abre una consola Serial. Deberías ver aparecer el “Hello!” una y otra vez:

Observa que tuvimos que usar Serial.write() en lugar de Serial.print(). El comando write() envía un byte crudo a través de la línea serie. print(), por otro lado, tratará de interpretar el número y enviará la versión codificada en ASCII de ese número. Por ejemplo, Serial.print(0x48) imprimiría 72 en la consola.

Además, fíjate que hemos utilizado el carácter ASCII 0x0A, que es el carácter de control de “avance de línea”. Esto hace que la impresora (o la consola en este caso) avance a la siguiente línea. Es similar a pulsar la tecla ‘enter’.

Recursos y donde continuar

Hay muchos conjuntos de codificación de caracteres disponibles. La codificación más popular para la World Wide Web es UTF-8. En junio de 2016, UTF-8 se utiliza en el 87% de las páginas web.

UTF-8 es compatible con ASCII, lo que significa que los primeros 128 caracteres son los mismos que ASCII. UTF-8 puede utilizar 2, 3 y 4 bytes para codificar los caracteres de la mayoría de las lenguas escritas modernas, incluidos los caracteres latinos, griegos, cirílicos, árabes, chinos, coreanos y japoneses.

El conocimiento de la codificación ASCII básica puede ser útil cuando se trabaja con terminales en serie. Consulta los fundamentos de los terminales serie para aprender a utilizar algunos de los muchos programas de terminales serie disponibles.

Si estás interesado en descargar la tabla ASCII en formato de imagen, haz clic en el link de abajo. Con una imagen, puedes imprimirla y colgarla en tu pared, ponerla en una taza de café o imprimirla en tu mouse pad. Link.

Shawn Hymel. ASCII. Sparkfun.

https://learn.sparkfun.com/tutorials/ascii?__hstc=250566617.ef0e862fd53c09ae425328d1719ebad0.1656108342814.1658784734978.1660250108055.4&__hssc=250566617.2.1660250108055&__hsfp=1524138301