Tanto o ASCII quanto o Unicode serve para representar texto, isso inclue letras maiúsculas e minúsculas, números, pontuação e até emojis (no caso do Unicode).
ASCII
De acordo com a tabela ASCII, se recebermos um texto qualquer por exemplo, com o conteúdo: 72 69 76 76 79, essa mensagem em ASCII significaria "HELLO" em maiúsculas.
A CPU no final das contas vai trabalhar com esses valores em binário. E para mostrar isso, o binário resultante desses números são:
01001000 01000101 01001100 01001100 01001111
Cada código em ASCII vai resultar em um binário de 8 bits (1 byte), isso significa que cada código tem 8 dígitos binários. Nesse exemplo temos ou 5 bytes.
E sim, isso significa que o texto "HELLO" em ASCII tem o tamanho de 5 bytes.
Qualquer código na tabela "ASCII" vai resultar em um binário de 8 bits (1 byte).
Por mais que ela contemple uma quantidade interessante de caracteres possíveis (256), ela é bem limitada.
Já que outros idiomas como português ou árabe podem ser bem diferentes, ter acentuação, fora os emojis também...
Unicode
É ai que entra o Unicode, um sistema que visa suportar os mais diversos tipos de representação de texto, isso inclue emojis, símbolos em outros idiomas e muito mais...
Cada código do Unicode pode ter de 8 a 32 bits, isso porque depende do padrão de codificação, mais conhecido como UTF-8, UTF-16 e UTF-32.
O emoji (😂) tem os bits 11111011000000010 (17 bits no total, que dá ).
O padrão de codificação, de forma resumida, é a maneira como os dados (como caracteres, números, ou símbolos) são convertidos em sequências de bits.
Como o Unicode consegue representar até 32 bits, isso dá um número gigantesco de possibilidades de representar informações.
Exemplo com o charset do HTML
Uma maneira simples de visualizar esses dois sistemas de caracteres em ação é usando um HTML simples. Dentro das tag head
, existe uma tag usada para o navegador identificar o conjunto de caracteres que ele deve usar pra renderizar os textos:
<meta charset="UTF-8">
Tá vendo esse UTF-8? É nosso sistema Unicode, porém é possível usar o ASCII também:
<meta charset="ASCII">
Agora vamos colocar um h1
pra ver como o navegador lida com esses sistemas:
<head>
<meta charset="UTF-8">
</head>
<body>
<h1>Olá, mundo! 😆<h1>
</body>
Agora vamos usar o mesmo código, porém usando o sistema ASCII:
<head>
<meta charset="ASCII">
</head>
<body>
<h1>Olá, mundo! 😆<h1>
</body>
Como o ASCII não tem acentuação e muito menos emojis, nosso h1
ficou todo quebrado haha