Codificação de caracteres
Uma codificação de caracteres define como caracteres ou pontos de código são representados por sequências de bytes e depois descodificados.
Definição
Uma codificação de caracteres determina como unidades textuais se convertem em números ou bytes para armazenamento e transmissão e como regressam a texto. Emissor e destinatário devem usar a mesma codificação.
ASCII, UTF-8, UTF-16 e páginas antigas são codificações ou esquemas. Unicode define repertório e pontos; UTF-8 e UTF-16 a sua representação concreta.
Como funciona
O codificador associa sequências válidas e o descodificador aplica as regras inversas. Em UTF-8, A é 41 e € é E2 82 AC. Codificações de comprimento variável usam diferentes quantidades de bytes.
O charset HTTP, a declaração do ficheiro ou o protocolo indicam o descodificador. Sem contexto, os mesmos bytes podem produzir textos diferentes.
Exemplo prático
Descodificados como UTF-8, os bytes E2 82 AC produzem €. Com uma codificação de byte único alheia produzem outros caracteres; esta corrupção é frequentemente chamada mojibake.
Converter exige descodificar corretamente a origem e codificar os caracteres no destino. Alterar só o rótulo não converte bytes.
Erros frequentes
Uma sequência inválida pode ser rejeitada ou substituída por U+FFFD. Se o destino não representar um carácter, pode ocorrer erro, substituição ou perda.
Marca de ordem dos bytes, endianness, normalização Unicode e fins de linha são assuntos relacionados mas distintos. Codificação não é criptografia.
Não. Unicode atribui pontos e propriedades; UTF-8 codifica esses pontos em bytes.
Os bytes podem ter sido mal descodificados ou substituídos porque o destino não representava os caracteres.
Não. Alguns bytes são válidos em várias codificações, sobretudo texto ASCII curto. São necessários metadados, BOM ou contexto.