ISO-8859-1
ISO-8859-1 (Latin-1) é uma codificação legada de byte único. Saiba como mapeia 256 pontos de código, por que os navegadores a tratam como Windows-1252 e suas entidades.
ISO-8859-1 (nomeado em referência à International Organization for Standardization, também conhecido como Latin-1) é uma codificação de caracteres legada de byte único. Esta página explica o que é, onde ainda é encontrado, a maneira surpreendente como os navegadores realmente o tratam, e a referência completa de caracteres/entidades.
Note que o ISO-8859-1 não é o padrão nos navegadores modernos. Desde o HTML5, o conjunto de caracteres padrão é o UTF-8, que é a codificação que você deve usar em todo novo documento. O ISO-8859-1 importa hoje principalmente quando você lê ou mantém páginas mais antigas.
O que é o ISO-8859-1
O ISO-8859-1 é uma codificação de byte único: cada caractere é armazenado em exatamente um byte, portanto pode representar no máximo 256 pontos de código, numerados de 0 a 255. Esses 256 slots se dividem em duas metades:
- 0–127 — idênticos ao ASCII. As letras latinas básicas
A–Zea–z, os dígitos0–9, pontuação, o espaço e os caracteres de controle estão aqui. - 128–255 — o suplemento Latin-1: letras acentuadas (à, é, ñ, ü) e símbolos como ©, £, ¥, ½ e ÷. Estes cobrem a maioria dos idiomas da Europa Ocidental.
Por ser de byte único, o ISO-8859-1 não pode representar caracteres fora desse conjunto — não há como codificar, por exemplo, o sinal de euro €, o grego, o cirílico ou qualquer script CJK. Essa limitação é exatamente o motivo pelo qual o UTF-8 multibyte o substituiu. Para uma visão mais ampla sobre como as codificações se relacionam, veja Conjuntos de Caracteres HTML.
Contexto histórico
Nos anos 1990 e início dos anos 2000, o ISO-8859-1 era a codificação de fallback padrão para HTTP e HTML na web ocidental, portanto muitas páginas mais antigas foram criadas com ele. Você ainda o encontra hoje em arquivos HTML legados, bancos de dados, cabeçalhos de e-mail e respostas HTTP que não foram migradas para UTF-8. Reconhecê-lo ajuda a depurar o clássico problema de "mojibake", onde caracteres acentuados são renderizados como símbolos embaralhados porque os bytes reais de um arquivo e sua codificação declarada estão em desacordo.
O Problema do Windows-1252
Aqui está a fonte mais comum de confusão. De acordo com o Padrão de Codificação WHATWG, quando um navegador vê um documento declarado como charset=ISO-8859-1, ele não o decodifica como ISO-8859-1 verdadeiro. Em vez disso, decodifica como Windows-1252.
A diferença está no intervalo 128–159. No ISO-8859-1 genuíno, essas posições são caracteres de controle C1 não utilizados. O Windows-1252 reutiliza esse intervalo para caracteres imprimíveis como o sinal de euro (€), aspas curvas (" ", ' '), o travessão (—) e o sinal de marca registrada (™). Como o conteúdo do mundo real frequentemente esperava esses caracteres do Windows, o padrão determina que ISO-8859-1 (e seus aliases latin1, iso8859-1, etc.) seja tratado como Windows-1252 para decodificação HTML.
A conclusão prática: uma declaração <meta charset="ISO-8859-1"> e uma declaração <meta charset="windows-1252"> se comportam de forma idêntica nos navegadores. Quando você não tem certeza qual codificação legada uma página usa, geralmente é por isso que os caracteres no intervalo 128–159 ainda aparecem corretamente.
Declarando a Codificação de Caracteres
Use <meta charset="UTF-8"> para declarar a codificação do seu documento HTML e coloque-o dentro da seção <head>:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<!-- Your content here -->
</body>
</html>O posicionamento é importante. O padrão HTML exige que a declaração <meta charset> apareça dentro dos primeiros 1024 bytes do documento. O navegador começa a ler os bytes antes de saber a codificação, portanto a declaração precisa aparecer cedo o suficiente para que o navegador a encontre e reinterprete o restante da página corretamente. No exemplo acima, <meta charset="UTF-8"> é a primeira coisa dentro do <head>, confortavelmente dentro dessa janela. Para declarar uma codificação legada, você escreveria <meta charset="ISO-8859-1"> (que, como mencionado acima, o navegador trata como Windows-1252).
Caracteres Reservados em HTML
Alguns caracteres são reservados em HTML porque são usados para construir a linguagem HTML. Por exemplo, você não pode usar os sinais de maior ou menor no seu texto, pois o navegador tentará interpretá-los como HTML. Use o nome da entidade ou o número da entidade quando quiser exibir qualquer um dos caracteres reservados.
Veja a lista de caracteres reservados na tabela abaixo:
| Caractere | Número da Entidade | Nome da Entidade | Descrição |
|---|---|---|---|
| " | " | " | aspas |
| ' | ' | ' | apóstrofo |
| & | & | & | e comercial |
| < | < | < | menor que |
| > | > | > | maior que |
Para a referência completa de referências de caracteres nomeados, veja Entidades HTML.
Símbolos ISO 8859-1
| Caractere | Número da Entidade | Nome da Entidade | Descrição |
|---|---|---|---|
| espaço não separável | |||
| ¡ | ¡ | ¡ | ponto de exclamação invertido |
| ¢ | ¢ | ¢ | centavo |
| £ | £ | £ | libra |
| ¤ | ¤ | ¤ | moeda |
| ¥ | ¥ | ¥ | iene |
| ¦ | ¦ | ¦ | barra vertical quebrada |
| § | § | § | seção |
| ¨ | ¨ | ¨ | trema de espaçamento |
| © | © | © | direitos autorais |
| ª | ª | ª | indicador ordinal feminino |
| « | « | « | aspas angulares (esquerda) |
| ¬ | ¬ | ¬ | negação |
| | | | hífen suave |
| ® | ® | ® | marca registrada |
| ¯ | ¯ | ¯ | mácron de espaçamento |
| ° | ° | ° | grau |
| ± | ± | ± | mais ou menos |
| ² | ² | ² | sobrescrito 2 |
| ³ | ³ | ³ | sobrescrito 3 |
| ´ | ´ | ´ | acento agudo de espaçamento |
| µ | µ | µ | micro |
| ¶ | ¶ | ¶ | parágrafo |
| · | · | · | ponto médio |
| ¸ | ¸ | ¸ | cedilha de espaçamento |
| ¹ | ¹ | ¹ | sobrescrito 1 |
| º | º | º | indicador ordinal masculino |
| » | » | » | aspas angulares (direita) |
| ¼ | ¼ | ¼ | fração 1/4 |
| ½ | ½ | ½ | fração 1/2 |
| ¾ | ¾ | ¾ | fração 3/4 |
| ¿ | ¿ | ¿ | ponto de interrogação invertido |
| × | × | × | multiplicação |
| ÷ | ÷ | ÷ | divisão |
Caracteres ISO 8859-1
| Caractere | Número da Entidade | Nome da Entidade | Descrição |
|---|---|---|---|
| À | À | À | A maiúsculo, acento grave |
| Á | Á | Á | A maiúsculo, acento agudo |
| Â | Â | Â | A maiúsculo, acento circunflexo |
| Ã | Ã | Ã | A maiúsculo, til |
| Ä | Ä | Ä | A maiúsculo, trema |
| Å | Å | Å | A maiúsculo, anel |
| Æ | Æ | Æ | AE maiúsculo |
| Ç | Ç | Ç | C maiúsculo, cedilha |
| È | È | È | E maiúsculo, acento grave |
| É | É | É | E maiúsculo, acento agudo |
| Ê | Ê | Ê | E maiúsculo, acento circunflexo |
| Ë | Ë | Ë | E maiúsculo, trema |
| Ì | Ì | Ì | I maiúsculo, acento grave |
| Í | Í | Í | I maiúsculo, acento agudo |
| Î | Î | Î | I maiúsculo, acento circunflexo |
| Ï | Ï | Ï | I maiúsculo, trema |
| Ð | Ð | Ð | ETH maiúsculo, islandês |
| Ñ | Ñ | Ñ | N maiúsculo, til |
| Ò | Ò | Ò | O maiúsculo, acento grave |
| Ó | Ó | Ó | O maiúsculo, acento agudo |
| Ô | Ô | Ô | O maiúsculo, acento circunflexo |
| Õ | Õ | Õ | O maiúsculo, til |
| Ö | Ö | Ö | O maiúsculo, trema |
| Ø | Ø | Ø | O maiúsculo, barra |
| Ù | Ù | Ù | U maiúsculo, acento grave |
| Ú | Ú | Ú | U maiúsculo, acento agudo |
| Û | Û | Û | U maiúsculo, acento circunflexo |
| Ü | Ü | Ü | U maiúsculo, trema |
| Ý | Ý | Ý | Y maiúsculo, acento agudo |
| Þ | Þ | Þ | THORN maiúsculo, islandês |
| ß | ß | ß | s minúsculo afiado, alemão |
| à | à | à | a minúsculo, acento grave |
| á | á | á | a minúsculo, acento agudo |
| â | â | â | a minúsculo, acento circunflexo |
| ã | ã | ã | a minúsculo, til |
| ä | ä | ä | a minúsculo, trema |
| å | å | å | a minúsculo, anel |
| æ | æ | æ | ae minúsculo |
| ç | ç | ç | c minúsculo, cedilha |
| è | è | è | e minúsculo, acento grave |
| é | é | é | e minúsculo, acento agudo |
| ê | ê | ê | e minúsculo, acento circunflexo |
| ë | ë | ë | e minúsculo, trema |
| ì | ì | ì | i minúsculo, acento grave |
| í | í | í | i minúsculo, acento agudo |
| î | î | î | i minúsculo, acento circunflexo |
| ï | ï | ï | i minúsculo, trema |
| ð | ð | ð | eth minúsculo, islandês |
| ñ | ñ | ñ | n minúsculo, til |
| ò | ò | ò | o minúsculo, acento grave |
| ó | ó | ó | o minúsculo, acento agudo |
| ô | ô | ô | o minúsculo, acento circunflexo |
| õ | õ | õ | o minúsculo, til |
| ö | ö | ö | o minúsculo, trema |
| ø | ø | ø | o minúsculo, barra |
| ù | ù | ù | u minúsculo, acento grave |
| ú | ú | ú | u minúsculo, acento agudo |
| û | û | û | u minúsculo, acento circunflexo |
| ü | ü | ü | u minúsculo, trema |
| ý | ý | ý | y minúsculo, acento agudo |
| þ | þ | þ | thorn minúsculo, islandês |
| ÿ | ÿ | ÿ | y minúsculo, trema |
Variantes do ISO-8859-1
O ISO-8859-1 é apenas a primeira parte da família maior ISO 8859. Cada parte mantém a metade inferior ASCII (0–127), mas troca a metade superior (128–255) para cobrir um grupo diferente de idiomas ou scripts. As partes mais comuns estão listadas abaixo.
| Conjunto de caracteres | Descrição | Cobre |
|---|---|---|
| ISO-8859-1 | Latin 1 | América do Norte, Europa Ocidental, América Latina, Caribe, Canadá, África. |
| ISO-8859-2 | Latin 2 | Europa Oriental. |
| ISO-8859-3 | Latin 3 | Sudeste da Europa, Esperanto, outros diversos. |
| ISO-8859-4 | Latin 4 | Escandinávia/Países Bálticos (e outros não incluídos no ISO-8859-1). |
| ISO-8859-5 | Latin/Cirílico | Os idiomas que usam o alfabeto cirílico, como búlgaro, bielorrusso, russo e macedônio. |
| ISO-8859-6 | Latin/Árabe | Os idiomas que usam o alfabeto árabe. |
| ISO-8859-7 | Latin/Grego | O grego moderno, bem como símbolos matemáticos derivados do grego. |
| ISO-8859-8 | Latin/Hebraico | Os idiomas que usam o alfabeto hebraico. |
| ISO-8859-9 | Latin/Turco | O idioma turco. Igual ao ISO-8859-1, exceto que os caracteres turcos substituem os islandeses. |
| ISO-8859-10 | Latin/Nórdico | Os idiomas nórdicos. |
| ISO-8859-15 | Latin 9 (Latin 0) | Similar ao ISO-8859-1, mas substitui alguns símbolos menos comuns pelo sinal de euro e alguns outros caracteres ausentes. |
Os navegadores modernos detectam automaticamente ou recorrem ao UTF-8 quando nenhuma codificação é especificada. Codificações legadas como o ISO-8859-1 são suportadas principalmente para compatibilidade retroativa com páginas web mais antigas. Para novos projetos, sempre use UTF-8 para garantir suporte completo a Unicode e consistência multiplataforma.
Veja também Conjuntos de Caracteres HTML, HTML ASCII e Entidades HTML.