Skip to main content
Validação HTML

A declaração de codificação interna “utf-8” não corresponde à codificação real do documento (“windows-1252”).

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-8 depois :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-Type com um parâmetro charset, 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.

Ajude-nos a melhorar os nossos guias

Este guia foi útil?

Pronto para validar os seus sites?
Comece o seu teste gratuito hoje.