Tabela ASCII e Outras

Onde entra a tabela ASCII e outras de mapa de caracteres na programação, no código dos programas em modo real, como a BIOS ou em outro local?

Em todo lugar onde você tem uma sequência de bytes e quer interpretá-la como texto, ou o contrário, gerar bytes a partir de um texto em memória.

Por exemplo, se você está lendo os bytes de um arquivo, você precisa saber como interpretar esses bytes. Cada byte é um caracter? Caracteres podem ser formados por mais de um byte? Caracteres tem tamanhos variados? Essas perguntas são respondidas com um charset, como o ASCII. Você tem que saber previamente que aquele arquivo contém um texto codificado em ASCII (ou utf-8, o que seja).

No final, são bytes sendo transmitidos entre processos, e precisamos de uma forma de interpretá-los. A mesma coisa acontece com números. Dados 8 bytes, que você sabe que tem algum tipo de número. Qual tipo você usa para ler o dado? Inteiro? Ponto flutuante? Você precisa saber previamente como o dado foi codificado, para saber como interpretá-lo.

Tabelas de caracteres servem como uma forma de codificar e decodificar texto.

Essa forma de interpretar bytes como texto está na BIOS e nos SOs? É isso?

O nome ASCII vem do inglês American Standard Code for Information Interchange ou ”Código Padrão Americano para o Intercâmbio de Informação”. Ele é baseado no alfabeto romano e sua função é padronizar a forma como os computadores representam letras, números, acentos, sinais diversos e alguns códigos de controle.

Se eu escrever um programa em modo real, essa forma de interpretar bytes como texto em funções específicas será colocada no código pelo próprio compilador?

Pode estar. A BIOS precisa ler bytes e transformá-los em texto de alguma forma? Se precisa, tem charset envolvido. Mesma coisa para o sistema operacional. Olha o tanto de texto que tem nessa tela que você está olhando agora mesmo.

Toda vez que eu pressiono uma tecla para informar o próximo caractere dessa resposta que estou escrevendo agora, o sistema operacional pega a representação da tecla que eu apertei e informa o browser. O browser usa essas informações para duas coisas: mostrar para mim mesmo o que eu estou digitando e, posteriormente, enviar essa sequência de bytes para o servidor por HTTP. Quando você dá um refresh na página, o seu browser puxa essas informações do servidor e usa uma tabela de caracteres para interpretá-los e mostrá-los na tela do seu computador.

Uma coisa é o texto que representa o seu programa, outra coisa é o texto que o seu programa usa durante o runtime. O encoding do código fonte depende do compilador. Swift, por exemplo, aceita utf-8. Outras linguagens aceitam apenas ASCII.

Se o seu código lida com texto, você vai fazer a lógica dentro do programa para fazer as conversões.

Me surgiu outra dúvida há pouco sobre este mesmo assunto. Se tudo é representado por 0 e 1, lendo, na maioria das vezes, em hexa, por economizar espaço, como se entra no computador representações de textos? Usando como exemplo, já que os demais tipos de informações devem seguir o mesmo princípio. Seria desenhos de pixels?

0 e 1 do mesmo jeito. O texto que aparece na tela não é a mesma coisa que é armazenada em memória e no disco. O que aparece na tela é só uma representação do dado, interpretado como caracteres.

1 curtida

Este é uma das melhores explicações sobre encoding e UTF-8 que já vi. Recomendo muito: https://www.youtube.com/watch?v=MijmeoH9LT4