Saltar para o conteúdo
BCBinary Code Translator
Menu
Voltar ao blog
Guia

Como os computadores representam texto em binário

Perceba como teclas, carateres Unicode, bytes UTF-8 e bits se relacionam, com exemplos que evitam confundir código binário com uma codificação de texto.

4 min de leitura
Por Binary Code Translator
#binário#texto#codificação#ciência da computação

Do teclado aos bytes

Um computador não guarda a forma desenhada de cada letra sempre que se escreve uma mensagem. Guarda números segundo regras partilhadas. Esses números são depois codificados em bytes; os bytes, por sua vez, são representados fisicamente por estados que o hardware interpreta como bits.

Esta cadeia tem várias camadas. Dizer apenas que «a letra A é 01000001» é útil como primeiro exemplo, mas omite uma decisão essencial: qual é a codificação de carateres?

Três conceitos diferentes

  1. Um caráter é uma unidade de texto, como A, á ou .
  2. Um ponto de código Unicode identifica um caráter abstrato. A é U+0041 e é U+20AC.
  3. Uma codificação, como UTF-8 ou UTF-16, transforma pontos de código numa sequência de unidades armazenáveis.

Unicode define o repertório e os pontos de código; UTF-8 define como os representar em bytes. Não são sinónimos.

O exemplo simples: ASCII

ASCII atribui números de 0 a 127 a letras latinas básicas, algarismos, pontuação e carateres de controlo. A letra A tem o valor decimal 65:

A → ASCII 65 → hexadecimal 41 → binário 01000001

Neste caso, ASCII e UTF-8 produzem o mesmo byte. É por isso que ficheiros compostos apenas por ASCII são também UTF-8 válidos.

O exemplo deixa de chegar quando aparece á, ou 😀: nenhum desses carateres faz parte do ASCII original.

Texto português em UTF-8

Em UTF-8, os primeiros 128 pontos de código ocupam um byte. Outros pontos de código ocupam entre dois e quatro bytes. Por exemplo:

Texto Ponto de código Bytes UTF-8 em hexadecimal Bits por byte
A U+0041 41 01000001
á U+00E1 C3 A1 11000011 10100001
U+20AC E2 82 AC 11100010 10000010 10101100

O á não é «um caráter de 16 bits» por natureza. Tem um ponto de código, mas a quantidade e a forma dos bytes dependem da codificação escolhida. Em UTF-8 ocupa dois bytes; em UTF-16 costuma ocupar uma unidade de código de 16 bits.

Há ainda sequências visualmente equivalentes. á pode ser o ponto de código U+00E1 ou a combinação a + U+0301. A normalização Unicode ajuda aplicações que precisam de comparar essas formas.

O que acontece ao premir uma tecla

O teclado envia um evento associado a uma tecla física. O sistema operativo e a disposição do teclado interpretam esse evento. A aplicação recebe texto; ao guardar ou transmitir esse texto, converte-o segundo uma codificação, frequentemente UTF-8.

Esta distinção explica por que motivo a mesma tecla pode produzir a, A ou outro símbolo, conforme a disposição, as teclas modificadoras e o método de introdução. O teclado não envia diretamente o byte ASCII da letra que aparece no ecrã.

Como surgem os carateres ilegíveis

O chamado mojibake aparece quando uma sequência de bytes é descodificada com regras diferentes das usadas na codificação. Se os bytes UTF-8 de á forem interpretados como Windows-1252, podem surgir dois símbolos correspondentes a U+00C3 e U+00A1 em vez da letra original.

Para resolver o problema, é preciso saber:

  • quais são os bytes originais;
  • que codificação os produziu;
  • que codificação a aplicação assumiu;
  • se houve uma conversão destrutiva intermédia.

Mudar o tipo de letra não corrige bytes mal descodificados. Um tipo de letra só desenha os carateres que a aplicação já interpretou.

Testar no conversor

No conversor de texto para binário, compare A, á, e 😀. Conte os grupos de oito bits e observe quantos bytes UTF-8 cada exemplo produz. Depois use o conversor de binário para texto para recuperar o conteúdo.

O binário mostra os bits; UTF-8 explica como esses bits representam texto. Manter as duas ideias separadas evita a maioria dos erros de interoperabilidade.

Preferências de cookies

Gerir as preferências de cookies. Os cookies necessários não podem ser desativados.

Necessários

Obrigatório

Necessários para seleção de idioma, escolhas de privacidade e funcionalidades básicas do site.

Cookies: NEXT_LOCALE

Análises

Cookies opcionais de análise ajudam a entender o tráfego e melhorar o site.

Cookies: _ga, _gid, _gat, _clck, _clsk

Publicidade

Cookies opcionais de publicidade podem ser usados para mostrar anúncios relevantes e medir desempenho.

Cookies: __gads, _gcl_au, IDE