Sobre este problema HTML
A especificação HTML5 obriga o UTF-8 como a única codificação de caracteres permitida para documentos web declarada através de tags <meta>. Codificações legadas como windows-1251 (uma codificação de caracteres cirílicos), iso-8859-1, shift_jis e outras deixaram de ser valores válidos em declarações <meta> do HTML5. Esta restrição existe porque o UTF-8 é uma codificação universal que pode representar virtualmente qualquer carácter de qualquer sistema de escrita, eliminando os problemas de interoperabilidade que assolaram a web quando dezenas de codificações concorrentes estavam em uso.
Quando o validador encontra content="text/html; charset=windows-1251" num elemento <meta>, assinala-o porque a parte charset= deve ser seguida por utf-8 — nenhum outro valor é aceite. Isto aplica-se quer você use a sintaxe mais longa <meta http-equiv="Content-Type"> ou a sintaxe mais curta <meta charset>.
Porque isto importa
-
Conformidade com as normas: O WHATWG HTML Living Standard exige explicitamente
utf-8como a codificação de caracteres quando declarada numa tag<meta>. Codificações não conformes irão desencadear erros de validação. -
Internacionalização: O UTF-8 suporta todos os caracteres Unicode, fazendo com que as suas páginas funcionem corretamente para utilizadores de todas as línguas, incluindo texto cirílico para o qual o
windows-1251foi originalmente concebido. - Segurança: Codificações legadas podem introduzir vulnerabilidades de segurança, incluindo certos vetores de ataques de cross-site scripting (XSS) que exploram a ambiguidade da codificação.
- Consistência do navegador: Embora os navegadores possam ainda reconhecer codificações legadas, depender delas pode causar mojibake (texto distorcido) quando há uma incompatibilidade entre a codificação declarada e a real.
Como corrigir
-
Atualize a tag
<meta>para declararutf-8como o charset. - Volte a guardar o seu ficheiro em codificação UTF-8 usando o seu editor de texto ou IDE. A maioria dos editores modernos suportam isto — procure por uma opção de codificação em “Guardar Como” ou na barra de estado.
-
Verifique a configuração do seu servidor. Se o seu servidor enviar um cabeçalho HTTP
Content-Typecom uma codificação diferente, o cabeçalho do servidor tem precedência sobre a tag<meta>. Certifique-se de que ambos concordam com UTF-8. -
Converta o seu conteúdo. Se o seu texto foi originalmente escrito em
windows-1251, poderá precisar de o converter para UTF-8. Ferramentas comoiconvna linha de comandos podem ajudar:iconv -f WINDOWS-1251 -t UTF-8 input.html > output.html.
Exemplos
❌ Incorreto: Usar charset windows-1251
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
✅ Correto: Usar utf-8 com sintaxe http-equiv
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
✅ Correto: Usar a sintaxe mais curta <meta charset> (preferida em HTML5)
<meta charset="utf-8">
Exemplo de documento completo
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8">
<title>Пример страницы</title>
</head>
<body>
<p>Текст на русском языке в кодировке UTF-8.</p>
</body>
</html>
A sintaxe mais curta <meta charset="utf-8"> é geralmente preferida em documentos HTML5 porque é mais concisa e consegue o mesmo resultado. Qualquer que seja a sintaxe que escolha, coloque a declaração charset dentro dos primeiros 1024 bytes do seu documento — idealmente como o primeiro elemento dentro de <head> — para que os navegadores possam detetar a codificação o mais cedo possível.
Encontre problemas como este automaticamente
O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.