Sobre este problema HTML
Quando um navegador ou validador lê o seu documento HTML, procura a declaração <meta charset="..."> para determinar como descodificar os bytes no ficheiro. Cada codificação de caracteres mapeia bytes para caracteres de forma diferente. UTF-8 e Windows-1252 partilham os mesmos mapeamentos para caracteres ASCII básicos (letras A–Z, dígitos, pontuação comum), mas divergem para bytes no intervalo 0x80–0x9F. Windows-1252 usa estes bytes para caracteres como €, ", ", — e ™, enquanto UTF-8 os trata como inválidos ou os interpreta como partes de sequências multi-byte. Quando a codificação declarada não corresponde à codificação real, o validador gera este erro, e os navegadores podem renderizar caracteres incorretamente.
Isto é um problema por várias razões:
-
Apresentação de texto quebrada: Caracteres como aspas curvas (
" "), travessões longos (—) e letras acentuadas (é,ñ) podem aparecer como mojibake — sequências comoâ€"oué— confundindo os seus leitores. - Conformidade com padrões: A especificação HTML requer que a codificação declarada corresponda à codificação real de bytes do ficheiro. Uma incompatibilidade é um erro de conformidade.
- Acessibilidade: Leitores de ecrã e outras tecnologias assistivas dependem da interpretação correta de caracteres. Texto corrompido é ininteligível para estas ferramentas.
- Motores de busca: Incompatibilidades de codificação podem fazer com que os motores de busca indexem texto corrompido, prejudicando a capacidade de descoberta do seu conteúdo.
Como resolver
A melhor abordagem é voltar a guardar o seu ficheiro em codificação UTF-8. A maioria dos editores de texto modernos e IDEs suportam isto:
- VS Code: Clique no indicador de codificação na barra de estado inferior (pode dizer “Windows 1252”), selecione “Save with Encoding” e escolha “UTF-8.”
- Sublime Text: Vá a File → Save with Encoding → UTF-8.
- Notepad++: Vá a Encoding → Convert to UTF-8, depois guarde o ficheiro.
-
Vim: Execute
:set fileencoding=utf-8depois:w.
Após voltar a guardar, certifique-se de que a sua declaração <meta charset="utf-8"> permanece no <head>. A tag <meta charset> deve aparecer o mais cedo possível — idealmente como o primeiro elemento dentro de <head> — porque o navegador precisa de conhecer a codificação antes de analisar qualquer outro conteúdo.
Se o seu fluxo de trabalho ou sistema legado absolutamente requer codificação Windows-1252, pode alterar a declaração para <meta charset="windows-1252"> em vez disso. No entanto, isto é fortemente desencorajado. UTF-8 é o padrão universal para a web, suporta virtualmente todos os caracteres de todas as línguas, e é recomendado pela especificação HTML do WHATWG.
Exemplos
Incorreto — incompatibilidade de codificação gera o erro
O ficheiro está guardado em Windows-1252, mas a tag meta declara UTF-8:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>My Page</title>
</head>
<body>
<!-- The byte 0x93 in Windows-1252 represents " but is invalid in UTF-8 -->
<p>She said, "Hello!"</p>
</body>
</html>
Isto produz o erro do validador: Internal encoding declaration “utf-8” disagrees with the actual encoding of the document (“windows-1252”).
Correto — ficheiro guardado como UTF-8 com declaração correspondente
Volte a guardar o ficheiro em codificação UTF-8. A tag meta e a codificação de bytes do ficheiro agora concordam:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>My Page</title>
</head>
<body>
<p>She said, "Hello!"</p>
</body>
</html>
Alternativa — declaração alterada para corresponder ao ficheiro Windows-1252
Se não conseguir alterar a codificação do ficheiro, atualize a declaração charset para corresponder. Isto elimina o erro de incompatibilidade mas não é a abordagem recomendada:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="windows-1252">
<title>My Page</title>
</head>
<body>
<p>She said, "Hello!"</p>
</body>
</html>
Dicas para prevenir este problema
- Configure o seu editor para usar UTF-8 por padrão para todos os ficheiros novos.
- Se copiar texto do Microsoft Word ou outras aplicações de desktop, esteja ciente de que frequentemente usam aspas curvas Windows-1252 e caracteres especiais. Colar este texto num ficheiro UTF-8 não é problema desde que o seu editor converta adequadamente os caracteres para bytes UTF-8 ao guardar.
-
Use
<meta charset="utf-8">como o primeiro elemento dentro de<head>para que a codificação seja estabelecida antes de o navegador encontrar qualquer outro conteúdo. -
Se o seu servidor enviar um cabeçalho HTTP
Content-Typecom um parâmetrocharset, certifique-se de que também corresponde — por exemplo,Content-Type: text/html; charset=utf-8.
Encontre problemas como este automaticamente
O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.