CodeGym /Cursos /C# SELF /O que é codificação e por que ela é necessária

O que é codificação e por que ela é necessária

C# SELF
Nível 37 , Lição 0
Disponível

1. Introdução

Imagine que você é um diplomata numa cúpula internacional: cada um fala sua própria língua e usa sua própria escrita. Para se entender, é preciso um tradutor universal — um conjunto comum de regras que mapeia caracteres. Nos computadores essa função é feita pelas codificações.

O computador entende apenas uma "língua" — sequências de zeros e uns. 0 e 1 — esse é o seu "alfabeto". Toda a informação é armazenada e transmitida como bytes. Um byte é 8 bits (por exemplo, 01000001).

Como ligar nossas letras e sinais aos bytes? Como o computador sabe que a letra "A" não é só um conjunto de 0/1, mas sim o caractere que deve aparecer na tela?

Codificação

Codificação é um conjunto de regras (uma tabela de mapeamento) que define como cada símbolo (letra, número, sinal, ideograma, emoji) é convertido em uma sequência de bytes e como esses bytes são interpretados de volta em símbolos.

Analogamente ao código Morse: você traduz o texto em pontos e traços, envia a mensagem, e o receptor, seguindo as mesmas regras, reconstrói os símbolos. No computador, o acordo "bytes ↔ símbolos" é a codificação.

2. Por que essa dor de cabeça com codificações?

  • Tradução entre o mundo humano e o da máquina: sem codificação, texto é só uma sequência de bytes; com codificação, são símbolos significativos.
  • Universalidade e compatibilidade: programas e sistemas operacionais precisam "entrar em acordo" sobre as regras. Se um arquivo é declarado como UTF-8, ele também precisa ser lido como UTF-8.
  • Suporte para muitos idiomas e símbolos: cirílico, escrita árabe, ideogramas, símbolos matemáticos, emoji — quanto maior o conjunto de símbolos, mais complexa e flexível precisa ser a codificação.

3. ASCII – a codificação "primitiva"

Uma das codificações mais antigas e básicas é ASCII (American Standard Code for Information Interchange). Ela usa 7 bits por símbolo, ou seja, pode representar 128 símbolos diferentes: o alfabeto latino (A-Z, a-z), dígitos (0-9), sinais de pontuação e códigos de controle (por exemplo, nova linha, tab).

Símbolo Código decimal (ASCII) Código binário (7 bits)
A
65
1000001
B
66
1000010
a
97
1100001
b
98
1100010
0
48
0110000
1
49
0110001
!
33
0100001
Espaço
32
0100000

Historicamente o oitavo bit muitas vezes servia como bit de paridade, e depois começaram a usar esse bit em "extensões" do ASCII — assim surgiram vários conjuntos de um byte para diferentes locais, o que levou à bagunça.

Se você escrever "Hello", no disco isso vai ficar mais ou menos assim (1 byte por caractere; para o ASCII de 7 bits o bit mais significativo é zero):

H (01001000) e (01100101) l (01101100) l (01101100) o (01101111)

Simples. Mas e as letras cirílicas ou os ideogramas? No ASCII eles não existem — é um "dicionário monolíngue", útil só para o conjunto latino básico.

4. "Caracteres estranhos" — por que codificação não é brincadeira

Às vezes, ao abrir um arquivo, você vê algo como Привет em vez de "Privet". Isso se chama "caracteres estranhos" (ou Mojibake) — o resultado de ler bytes com a codificação errada.

Suponha que você salvou "Privet, mir!" na codificação Windows-1251, onde os bytes para as letras de "Privet" podem ser assim (simplificado):

  • P207
  • r240
  • i232
  • v226
  • e229
  • t242

Aí seu colega abriu o arquivo num editor que esperava ISO-8859-1 (Latin-1), ou você usou StreamReader sem especificar a codificação, e ela não bateu com a do arquivo. Resultado: o byte 207 é interpretado como um símbolo de outra tabela — e o texto "quebra".

Símbolo original (Windows-1251) Representação em bytes (exemplo) Símbolo lido como ISO-8859-1
P
207
Ç
r
240
à
i
232
è
v
226
â
e
229
å
t
242
ò

No fim das contas obtemos Çàèâåò em vez de "Privet". Se um símbolo simplesmente não existe na codificação esperada, você vai ver quadrados ou pontos de interrogação.

Conclusão prática: ao ler/escrever textos é importante especificar a codificação explicitamente, especialmente se a origem dos dados não é controlada por você. No .NET isso é feito via StreamReader/StreamWriter com a Encoding correta (por exemplo, UTF-8 ou Encoding.GetEncoding("windows-1251")). Isso ajuda a evitar "caracteres estranhos" e garante troca de dados correta entre sistemas.

Nas próximas aulas vamos aprender a escolher e especificar a codificação ao trabalhar com arquivos e streams, para que seu código seja versátil, internacional e confiável.

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION