Sobre este problema HTML
Quando um navegador carrega um documento HTML, precisa de saber que codificação de caracteres usar para interpretar corretamente os bytes do ficheiro. O atributo charset da etiqueta <meta> (ou a declaração http-equiv="Content-Type") indica ao navegador que codificação esperar. Se esta declaração indica windows-1251 mas o ficheiro está efetivamente guardado como utf-8, o navegador enfrenta sinais contraditórios — a codificação declarada não corresponde ao conteúdo real dos bytes.
Esta incompatibilidade é importante por várias razões:
-
Renderização de texto quebrada: Caracteres fora do intervalo ASCII básico (como letras acentuadas, caracteres cirílicos, CJK, emojis e símbolos especiais) podem ser exibidos como corrompidos ou caracteres de substituição (frequentemente vistos como sequências
Ð,�, ou outros mojibake). - Integridade de dados: Submissões de formulários e operações de strings JavaScript podem produzir dados corrompidos se o navegador interpretar incorretamente a codificação.
- Conformidade com normas: A Norma Viva HTML WHATWG requer que a declaração de codificação corresponda à codificação real do documento. Os validadores sinalizam esta incompatibilidade como um erro.
-
Comportamento inconsistente: Diferentes navegadores podem lidar com o conflito de forma diferente — alguns podem confiar na etiqueta
<meta>, outros podem detetar a codificação real — levando a resultados imprevisíveis entre diferentes user agents.
Como corrigir
-
Determine a codificação real do seu ficheiro. A maioria dos editores de texto modernos (VS Code, Sublime Text, Notepad++) exibe a codificação do ficheiro na barra de estado. Se o seu ficheiro está guardado como UTF-8 (que é a codificação recomendada para todo o conteúdo web novo), a sua etiqueta
<meta>deve refletir isso. -
Atualize a etiqueta
<meta>para declararutf-8em vez dewindows-1251. -
Prefira a sintaxe mais curta
charsetintroduzida no HTML5, que é mais simples e equivalente à formahttp-equivmais antiga. -
Coloque a declaração de codificação dentro dos primeiros 1024 bytes do documento, idealmente como o primeiro elemento dentro de
<head>, para que o navegador a encontre antes de analisar outro conteúdo.
Exemplos
❌ Incorreto: codificação declarada não corresponde à codificação real do ficheiro
O ficheiro está guardado como UTF-8 mas a etiqueta <meta> declara windows-1251:
<head>
<meta charset="windows-1251">
<title>My Page</title>
</head>
Ou usando a sintaxe http-equiv mais antiga:
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>My Page</title>
</head>
✅ Correto: codificação declarada corresponde ao ficheiro UTF-8 real
Usando o atributo charset moderno do HTML5:
<head>
<meta charset="utf-8">
<title>My Page</title>
</head>
Ou usando a forma http-equiv equivalente:
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>My Page</title>
</head>
✅ Correto: exemplo completo do documento
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>My Page</title>
</head>
<body>
<p>Hello, world!</p>
</body>
</html>
E se você realmente precisar de windows-1251?
Se o seu conteúdo genuinamente requer codificação windows-1251 (por exemplo, um ficheiro de texto cirílico legado), precisa de reguardar o ficheiro na codificação windows-1251 usando o seu editor de texto. No entanto, UTF-8 é fortemente recomendado para todo o conteúdo web porque suporta todos os caracteres Unicode e é a codificação padrão para HTML5. Converter o seu ficheiro para UTF-8 e atualizar a etiqueta <meta> em conformidade é quase sempre o melhor caminho a seguir.
Encontre problemas como este automaticamente
O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.