Sobre este problema HTML
A codificação de caracteres diz ao navegador como mapear os bytes brutos do seu ficheiro HTML em caracteres legíveis. Quando nenhuma codificação é declarada, os navegadores devem confiar em heurísticas ou predefinições para descobrir qual codificação usar. O recurso do validador ao “windows-1252” reflete o comportamento descrito na especificação HTML: se nenhuma informação de codificação for encontrada, os analisadores podem usar como predefinição esta codificação legada. Isto pode causar problemas sérios — caracteres como aspas curvadas, travessões longos, letras acentuadas, emoji e scripts não-latinos podem aparecer como texto corrompido (muitas vezes chamado “mojibake”) se a codificação real do ficheiro não corresponder ao que o navegador assume.
Porque isto é importante
- Correção: Se o seu ficheiro for guardado como UTF-8 (que é a predefinição na maioria dos editores modernos) mas o navegador o interpretar como windows-1252, caracteres multi-byte irão renderizar incorretamente.
- Conformidade com padrões: O WHATWG HTML Living Standard exige que uma declaração de codificação de caracteres esteja presente. A codificação deve também ser declarada dentro dos primeiros 1024 bytes do documento.
- Segurança: Codificação ambígua pode ser explorada em certos ataques de cross-site scripting (XSS) onde um atacante tira vantagem de incompatibilidades de codificação.
- Interoperabilidade: Diferentes navegadores podem escolher diferentes codificações de recurso, levando a renderização inconsistente entre plataformas.
Como corrigir
A correção mais simples e recomendada é adicionar <meta charset="utf-8"> como o primeiro elemento filho dentro de <head>, antes de <title> ou qualquer outros elementos. Deve aparecer dentro dos primeiros 1024 bytes do documento para que o analisador o encontre suficientemente cedo.
UTF-8 é o padrão universal para a web. Pode representar cada carácter em Unicode, é retrocompatível com ASCII, e é a codificação recomendada pela especificação WHATWG HTML. A menos que tenha uma razão muito específica para usar outra codificação, use sempre UTF-8.
Deve também garantir que o seu editor de texto ou ferramenta de compilação está realmente a guardar o ficheiro na codificação UTF-8. Declarar <meta charset="utf-8"> enquanto o ficheiro é guardado numa codificação diferente irá ainda produzir texto corrompido.
Uma abordagem alternativa (menos comum) é declarar a codificação através de um cabeçalho HTTP Content-Type enviado pelo servidor, tal como Content-Type: text/html; charset=utf-8. No entanto, a tag <meta> é ainda recomendada como recurso para quando os ficheiros são visualizados localmente ou em cache sem cabeçalhos.
Exemplos
❌ Declaração de codificação de caracteres em falta
Este documento não tem declaração de codificação, acionando o aviso do validador:
<!DOCTYPE html>
<html lang="en">
<head>
<title>My Page</title>
</head>
<body>
<p>Héllo, wörld! — enjoy "quotes" and emöji 🎉</p>
</body>
</html>
✅ Corrigido com <meta charset="utf-8">
Adicionar a tag <meta charset="utf-8"> como o primeiro elemento em <head> resolve o problema:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>My Page</title>
</head>
<body>
<p>Héllo, wörld! — enjoy "quotes" and emöji 🎉</p>
</body>
</html>
❌ Codificação declarada demasiado tarde
O <meta charset> deve vir antes de outro conteúdo no <head>. Colocá-lo depois de um <title> que contém caracteres não-ASCII significa que o analisador pode já ter comprometido com uma codificação errada:
<!DOCTYPE html>
<html lang="en">
<head>
<title>Café Menu</title>
<meta charset="utf-8">
</head>
<body>
<p>Welcome to the café.</p>
</body>
</html>
✅ Codificação declarada antes de todo o outro conteúdo
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Café Menu</title>
</head>
<body>
<p>Welcome to the café.</p>
</body>
</html>
A conclusão chave: coloque sempre <meta charset="utf-8"> como o primeiro elemento dentro de <head>. Esta é uma pequena adição que previne toda uma classe de problemas de renderização de caracteres e segurança.
Encontre problemas como este automaticamente
O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.