O Que É uma Codificação de Caracteres? Explicado
Uma codificação de caracteres é o esquema que mapeia caracteres para os bytes usados para armazenar e transmitir texto, e de volta.
Os computadores armazenam tudo como bytes, mas os humanos leem caracteres. Uma codificação de caracteres é o acordo que conecta os dois: quais bytes significam quais letras. Quando quem escreve e quem lê um arquivo concordam sobre a codificação, o texto faz o ida e volta perfeitamente; quando discordam, você obtém saída corrompida - uma das falhas de CI mais comuns e confusas.
O que é uma codificação de caracteres
Uma codificação de caracteres é um mapeamento em ambas as direções: de caracteres para bytes ao escrever, e de bytes de volta para caracteres ao ler. Para ler um arquivo corretamente, um programa precisa usar a mesma codificação que foi usada para escrevê-lo. Caso contrário, ele interpreta os bytes de forma errada.
Conjunto de caracteres versus codificação
Um conjunto de caracteres (como o Unicode) é o inventário de caracteres e o número atribuído a cada um. Uma codificação (como UTF-8 ou UTF-16) é a regra concreta para transformar esses números em bytes. Um conjunto de caracteres pode ter várias codificações, e é por isso que ambas as informações importam.
Codificações legadas e mojibake
Antes do Unicode, existiam muitas codificações regionais - Latin-1, Windows-1252, Shift-JIS - cada uma cobrindo um conjunto limitado de caracteres. Ler um arquivo escrito em uma delas como se fosse outra produz "mojibake", os caracteres acentuados embaralhados que você às vezes vê na saída.
Codificação em CI
O CI roda em máquinas que podem ter locales padrão diferentes, então um job que funciona localmente pode falhar no CI puramente porque o runner assume uma codificação diferente ao ler um arquivo de código. Fixar a codificação no ambiente remove toda essa classe de não determinismo.
# Make a Python build encoding-deterministic in CI
env:
PYTHONUTF8: "1"
steps:
- run: python generate_docs.pyPor que importa para a reprodutibilidade
Um build reproduzível deve produzir saída idêntica em qualquer lugar. A codificação é uma entrada oculta: a mesma fonte pode gerar bytes diferentes se lida sob codificações diferentes. Padronizar UTF-8 em todo lugar - editores, arquivos e CI - elimina essa fonte de desvio.
Principais conclusões
- Uma codificação de caracteres mapeia caracteres para bytes e de volta; leitor e escritor precisam concordar sobre ela.
- Um conjunto de caracteres é o inventário de caracteres; uma codificação é como eles viram bytes.
- Bugs de codificação em CI vêm de diferenças de locale entre máquinas - fixe UTF-8 para builds determinísticos.