O Que É UTF-8? Codificação de Texto Unicode Explicada
O UTF-8 é a codificação de texto dominante que representa cada caractere Unicode usando um a quatro bytes, mantendo-se compatível com o ASCII puro.
O UTF-8 é como quase todo texto moderno é armazenado e transmitido. Ele pode representar cada caractere em cada idioma mais emoji, enquanto codifica inglês simples da mesma forma que o ASCII faz. Acertar a codificação importa em CI porque um arquivo lido com a codificação errada produz caracteres corrompidos ou trava por completo um passo do build.
O que é UTF-8
O UTF-8 é uma codificação de comprimento variável do Unicode. Caracteres ASCII comuns usam um único byte, enquanto outros caracteres usam dois, três ou quatro bytes. Isso significa que qualquer arquivo ASCII válido já é UTF-8 válido, o que tornou a adoção indolor e é uma grande razão pela qual o UTF-8 venceu.
Unicode versus codificação
O Unicode é o catálogo que atribui a cada caractere um número (um code point). Uma codificação como o UTF-8 é o esquema para transformar esses números em bytes reais. O mesmo caractere pode ser codificado de formas diferentes; o UTF-8 é apenas o esquema mais amplamente usado para fazer isso.
Por que o UTF-8 se tornou o padrão
O UTF-8 é retrocompatível com o ASCII, compacto para texto ocidental e capaz de representar tudo. A web se padronizou nele, e a maioria das linguagens e ferramentas agora o usa por padrão. Quando dois sistemas discordam sobre a codificação, o bug geralmente desaparece assim que ambos usam UTF-8.
Problemas de codificação em CI
Falhas de build por codificação geralmente remontam a uma incompatibilidade de locale: um runner com um locale não-UTF-8 lê errado um arquivo-fonte com caracteres acentuados ou emoji, produzindo mojibake ou um erro de decodificação. Forçar um locale UTF-8 no ambiente do job torna os builds determinísticos entre máquinas.
# Force a UTF-8 locale in a CI job
env:
LANG: C.UTF-8
LC_ALL: C.UTF-8
steps:
- run: python build.pyNota Latchkey
Os runners da Latchkey vêm com um locale UTF-8 por padrão, coincidindo com os runners hospedados pelo GitHub, então arquivos-fonte com caracteres não-ASCII fazem build da mesma forma sem lidar com locale extra.
Principais conclusões
- O UTF-8 codifica cada caractere Unicode em um a quatro bytes e é totalmente compatível com ASCII.
- O Unicode atribui números aos caracteres; o UTF-8 é o esquema que transforma esses números em bytes.
- A maioria dos bugs de codificação em CI são incompatibilidades de locale - forçar um locale UTF-8 torna os builds determinísticos.