Skip to main content
Validação HTML

Utilizar “windows-1252” em vez da codificação declarada “iso-8859-1”.

Sobre este problema HTML

As codificações iso-8859-1 (também conhecida como Latin-1) e windows-1252 (também chamada CP-1252) partilham os mesmos mapeamentos de caracteres para a maioria dos valores de bytes, mas divergem no intervalo 0x80 a 0x9F. Em iso-8859-1, estes bytes mapeiam para caracteres de controlo obscuros. Em windows-1252, mapeiam para caracteres imprimíveis úteis como aspas curvas (" "), travessões (), o símbolo do euro () e o símbolo de marca registada (). Porque os editores de texto do Windows historicamente guardavam ficheiros em windows-1252, muitos documentos declarados como iso-8859-1 contêm na realidade caracteres específicos de windows-1252 nesse intervalo de bytes.

Quando o validador encontra bytes no intervalo 0x80–0x9F num ficheiro declarado como iso-8859-1, sabe que o ficheiro é na realidade windows-1252, porque esses bytes seriam caracteres de controlo sem sentido sob o verdadeiro iso-8859-1. Isto desencadeia o aviso.

Os navegadores modernos já lidam com esta situação tratando qualquer declaração iso-8859-1 como windows-1252 — o WHATWG Encoding Standard mapeia explicitamente a etiqueta iso-8859-1 para a codificação windows-1252. Portanto, na prática, os navegadores não falham. No entanto, a incompatibilidade ainda importa para a conformidade com os padrões, e sinaliza que pode não ter controlo total sobre a codificação do seu documento, o que pode causar bugs subtis noutras ferramentas, configurações de servidor ou pipelines de processamento de dados.

Por que isto importa

  • Conformidade com padrões: Declarar uma codificação enquanto usa outra viola o requisito da especificação HTML de que a codificação declarada corresponda à codificação real do documento.
  • Interoperabilidade: Embora os navegadores lidem com isto graciosamente, outros consumidores de HTML — como rastreadores de motores de busca, leitores de ecrã, clientes de email ou analisadores do lado do servidor — podem não aplicar o mesmo mapeamento iso-8859-1-para-windows-1252, levando a caracteres distorcidos.
  • Manutenibilidade: Uma incompatibilidade de codificação é um sinal de um processo de construção frágil. Se alguma vez precisar de transcodificar, concatenar ou processar os seus ficheiros programaticamente, uma declaração incorreta pode causar corrupção de dados.

Como corrigir

Tem três opções, listadas da mais recomendada para a menos recomendada:

Opção 1: Converter para UTF-8 (Recomendado)

UTF-8 é o padrão universal para a web. Suporta todos os caracteres Unicode, é a codificação padrão no WHATWG HTML Standard e elimina toda esta classe de problemas.

  1. Abra o seu ficheiro no editor de texto ou IDE.
  2. Guarde-o novamente com codificação UTF-8 (a maioria dos editores modernos usa isto como padrão).
  3. Declare utf-8 na sua tag <meta>.
  4. Verifique que os caracteres especiais (aspas curvas, travessões, etc.) ainda se exibem corretamente após a conversão.

Opção 2: Declarar windows-1252

Se não conseguir converter para UTF-8, atualize a sua declaração para corresponder à codificação real:

  1. Mantenha o ficheiro guardado como windows-1252.
  2. Altere a sua tag <meta> para declarar windows-1252.

Opção 3: Guardar realmente como iso-8859-1

Se realmente precisar de iso-8859-1, deve garantir que o ficheiro não contém bytes no intervalo 0x80–0x9F. Isto significa remover ou substituir caracteres como aspas curvas, travessões e o símbolo do euro, visto que não existem em iso-8859-1.

Exemplos

Desencadear o aviso

Este documento declara iso-8859-1, mas se o ficheiro está guardado em windows-1252 e contém caracteres como aspas curvas ou travessões no intervalo de bytes 0x80–0x9F, o validador reportará a incompatibilidade:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="iso-8859-1">
  <title>My Page</title>
</head>
<body>
  <!-- Se este ficheiro contém bytes windows-1252 como aspas curvas ou travessões,
       o validador avisará sobre a incompatibilidade de codificação -->
  <p>She said, &ldquo;Hello!&rdquo;</p>
</body>
</html>

Correção: Converter para UTF-8

A melhor solução é guardar o ficheiro como UTF-8 e declará-lo adequadamente:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>My Page</title>
</head>
<body>
  <p>She said, "Hello!"</p>
</body>
</html>

Em UTF-8, aspas curvas, travessões, símbolos do euro e todos os outros caracteres Unicode são suportados nativamente — sem mais conflitos de intervalos de bytes.

Correção: Declarar windows-1252 explicitamente

Se converter para UTF-8 não for viável, torne a declaração honesta:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="windows-1252">
  <title>My Page</title>
</head>
<body>
  <p>Price: 50€ — bargain!</p>
</body>
</html>

Isto elimina o aviso porque a codificação declarada agora corresponde à codificação real do ficheiro.

Verificar a codificação do seu ficheiro

A maioria dos editores de código mostra a codificação atual do ficheiro na barra de estado. No VS Code, por exemplo, clique na etiqueta de codificação no canto inferior direito para reabrir o ficheiro com uma codificação diferente ou guardá-lo com uma nova. Ao converter de windows-1252 para UTF-8, verifique sempre que os caracteres especiais sobreviveram à conversão inspecionando a página renderizada.

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.