O morse foi a primeira codificação que permitiu a comunicação remota. Foi Samuel F. B. Morse que o criou em 1844. Este código é composto de pontos e travessões (código binário, de certa forma). Ele permitiu efetuar comunicações muito mais rápidas do que com o sistema de correio da época nos Estados Unidos, o Pony Express. O intérprete era o homem, por isso era preciso um bom conhecimento do código.
Vários códigos foram inventados posteriormente, incluindo o código Baudot, chamado de código Murray pelos ingleses. Em 10 de março de 1876, o Alexander Graham Bell criou o primeiro telefone, invenção revolucionária que permitiu fazer circular a informação vocal através de linhas metálicas. Estas linhas permitiram o desenvolvimento de máquinas para codificar e decodificar os caracteres pelo código Baudot. Nos anos 60, o código ASCII (American Standard Code for Information Interchange) foi adotado como código padrão. Ele permite a codificação de caracteres em 8 bits, dando a possibilidade de formação de 256 caracteres.
A memória do computador conserva todos os dados sob a forma digital. Não existe um método para armazenar diretamente os caracteres. Cada caractere possui o seu equivalente em código numérico, é o ASCII. O código ASCII básico representava os caracteres em 7 bits (ou seja, 128 caracteres possíveis, de 0 a 127). Os códigos 0 a 31 não são caracteres são chamados de caracteres de controle porque permitem fazer ações como carriage return (CR - retorno do carro em português) e bip sonoro (BEL), os Os códigos 65 a 90 representam as maiúsculas e os Os códigos 97 a 122 representam as minúsculas. Basta alterar o 6° bit para passar das maiúsculas para as minúsculas, isto é, acrescentar 32 ao código ASCII em base decimal.
Caractere | Código ASCII | Código hexadecimal |
---|---|---|
NUL (Nulo) | 0 | 00 |
SOH (Start of heading) | 1 | 01 |
STX (Start of text) | 2 | 02 |
ETX (End of text) | 3 | 03 |
EOT (End of transmission) | 4 | 04 |
ENQ (Enquiry) | 5 | 05 |
ACK (Acknowledge) | 6 | 06 |
BEL (Bell) | 7 | 07 |
BS (Backspace) | 8 | 08 |
TAB (Tabulação horizontal) | 9 | 09 |
LF (Line Feed, salto de linha) | 10 | 0A |
VT (Vertical tabulation, tabulação vertical) | 11 | 0B |
FF (Form feed) | 12 | 0C |
CR (Carriage return, retorno do carro) | 13 | 0D |
SO (Shift out) | 14 | 0E |
SI (Shift in) | 15 | 0F |
DLE (Data link escape) | 16 | 10 |
DC1 (Device control 1) | 17 | 11 |
DC2 (Device control 2) | 18 | 12 |
DC3 (Device control 3) | 19 | 13 |
DC4 (Device control 4) | 20 | 14 |
NAK (Negative acknowledgement) | 21 | 15 |
SYN (Synchronous idle) | 22 | 16 |
ETB (End of transmission block, fim de bloco de transmissão) | 23 | 17 |
CAN (Cancel, cancelar) | 24 | 18 |
EM (End of medium, fim do meio) | 25 | 19 |
SUB (Substitute, substituto) | 26 | 1A |
ESC (Escape, cararctere ESC) | 27 | 1B |
FS (File separator, separador de arquivo) | 28 | 1C |
GS (Group separator, separador de grupo) | 29 | 1D |
RS (Record separator, separador de registro) | 30 | 1E |
US (Unit separator, separador de registro) | 31 | 1F |
SP (Space, espaço) | 32 | 20 |
! | 33 | 21 |
" | 34 | 22 |
# | 35 | 23 |
$ | 36 | 24 |
% | 37 | 25 |
& | 38 | 26 |
' | 39 | 27 |
( | 40 | 28 |
) | 41 | 29 |
* | 42 | 2A |
+ | 43 | 2B |
, | 44 | 2C |
- | 45 | 2D |
. | 46 | 2E |
/ | 47 | 2F |
0 | 48 | 30 |
1 | 49 | 31 |
2 | 50 | 32 |
3 | 51 | 33 |
4 | 52 | 34 |
5 | 53 | 35 |
6 | 54 | 36 |
7 | 55 | 37 |
8 | 56 | 38 |
9 | 57 | 39 |
: | 58 | 3A |
; | 59 | 3B |
< | 60 | 3C |
= | 61 | 3D |
> | 62 | 3E |
? | 63 | 3F |
@ | 64 | 40 |
A | 65 | 41 |
B | 66 | 42 |
C | 67 | 43 |
D | 68 | 44 |
E | 69 | 45 |
F | 70 | 46 |
G | 71 | 47 |
H | 72 | 48 |
I | 73 | 49 |
J | 74 | 4A |
K | 75 | 4B |
L | 76 | 4C |
M | 77 | 4D |
N | 78 | 4E |
O | 79 | 4F |
P | 80 | 50 |
Q | 81 | 51 |
R | 82 | 52 |
S | 83 | 53 |
T | 84 | 54 |
U | 85 | 55 |
V | 86 | 56 |
W | 87 | 57 |
X | 88 | 58 |
Y | 89 | 59 |
Z | 90 | 5A |
[ | 91 | 5B |
92 | 5C | |
] | 93 | 5D |
^ | 94 | 5E |
_ | 95 | 5F |
' | 96 | 60 |
a | 97 | 61 |
b | 98 | 62 |
c | 99 | 63 |
d | 100 | 64 |
e | 101 | 65 |
f | 102 | 66 |
g | 103 | 67 |
h | 104 | 68 |
i | 105 | 69 |
j | 106 | 6A |
k | 107 | 6B |
l | 108 | 6C |
m | 109 | 6D |
n | 110 | 6E |
o | 111 | 6F |
p | 112 | 70 |
q | 113 | 71 |
r | 114 | 72 |
s | 115 | 73 |
t | 116 | 74 |
u | 117 | 75 |
v | 118 | 76 |
w | 119 | 77 |
x | 120 | 78 |
y | 121 | 79 |
z | 122 | 7A |
{ | 123 | 7B |
124 | 7C | |
} | 125 | 7D |
~ | 126 | 7E |
Toque de supressão | 127 | 7F |
O código ASCII foi concebido para a língua inglesa, por isso ele não contém caracteres acentuados, nem caracteres específicos de outro idioma. Para codificar este tipo de caractere é necessário recorrer a outro código. O código ASCII foi então estendido para 8 bits (um byte) para poder codificar mais caracteres (fala-se, aliás, de código ASCII estendido). Este código atribui os valores de 0 a 255 às letras maiúsculas e minúsculas, aos números, às marcas de pontuação e aos outros símbolos (caracteres acentuados no caso do código iso-latin1). Ele não é único e depende muito da plataforma utilizada. Os dois jogos de caracteres ASCII estendidos mais frequentemente utilizados são o código ASCII estendido OEM, ou seja, aquele que equipava as primeiras máquinas de tipo PC da IBM:
Também há o código ASCII estendido ANSI, utilizado pelos sistemas operacionais recentes:
O código EBCDIC (Extended Binary - Coded Decimal Interchange Code), desenvolvido pela IBM, permite codificar caracteres em 8 bits. Embora muito utilizado nas máquinas IBM, não teve o sucesso do código ASCII.
O sistema Unicode é um sistema de codificação dos caracteres em 16 bits inventado em 1991. O sistema Unicode permite representar qualquer caractere por um código em 16 bits, independentemente de qualquer sistema operacional ou linguagem de programação. Ele reúne, assim, quase todos os alfabetos existentes (árabe, armênio, cirílico, grego, hebreu, latino, etc.) e é compatível com o código ASCII. O conjunto dos códigos Unicode está disponível no site http://www.unicode.org/charts/.