Conjunto de caracteres do documento

Intended audience: Codificadores de XHTML/HTML (utilizando editores ou linguagem de script), programadores de script (PHP, JSP, etc.), codificadores de CSS, programadores de XSLT, gestores de projetos Web, e qualquer pessoa que queira entender o que é o Conjunto de Caracteres do Documento e como ele se relaciona com as codificações utilizadas em um documento ou página.

Question

O que é o 'Conjunto de Caracteres do Documento' para XML e HTML, e como ele se relaciona com as codificações que utilizo em meus documentos?

Answer

Para simplificar e ficar de acordo com a prática comum, quando escrevemos sobre o Unicode nesta área de Perguntas Frequentes, nos referimos ao conjunto de caracteres definido pelo Unicode e pela ISO/IEC 10646.

O conjunto de caracteres do documento ou conjunto de caracteres base de XML e HTML (da versão 4.0) é o Conjunto de Caracteres Universal (UCS), definido tanto pelos padrões da ISO/IEC 10646 como pelos padrões Unicode, que têm códigos idênticos.

Isto significa que o modelo lógico que descreve como os XML e HTML são processados é descrito em termos do conjunto de caracteres Unicode.

Isso não significa que todos os documentos HTML e XML devem ser codificados em Unicode, mas quer dizer que estes documentos podem conter apenas caracteres definidos pelo Unicode. Observe que conjuntos de caracteres e codificações de caracteres são coisas diferentes - por exemplo, o repertório completo do Unicode pode ser codificado em mais de uma forma como, por exemplo, UTF-8, UTF-16 e UTF-32. Qualquer codificação de caracteres pode ser utilizada em seus documentos desde que ela seja adequadamente declarada e que os caracteres que ela representa sejam um subconjunto do repertório Unicode. (Seria extremamente incomum encontrar caracteres que não sejam um subconjunto.)

Por outro lado, é uma boa ideia utilizar sempre que possível uma codificação Unicode, uma vez que ela simplifica muitos aspectos da internacionalização da Web e é amplamente suportada por agentes de usuários de HTML, e por todos os processadores de XML.

Uma consequência importante do conjunto de caracteres do documento é que os valores das referências dos caracteres numéricos (tais como ǵ e ǵ para a LETRA G MINÚSCULA COM ACENTO AGUDO) são interpretados como caracteres Unicode - independente da codificação que você utilizar em seu documento. Esta é uma fonte comum de erros entre as pessoas que não entendem a diferença.

By the way

Na prática, nem todos os caracteres Unicode podem ser utilizados em todos os XML e HTML. Por exemplo, alguns caracteres são excluídos de locais tais como nomes de tags de elementos, e alguns caracteres de controle são excluídos do conteúdo. No entanto, observe que o XML 1.1 permite a utilização de muitos outros caracteres em locais como nomes de tags de elementos do que o XML 1.0.

Informação do histórico

O HTML 2.0 definiu que todos os caracteres existentes em um documento HTML devem ser interpretados de acordo com a ISO 8859-1 (também conhecida como ISO Latin 1), mas também anunciou que todas as versões futuras de HTML utilizarão um superconjunto destes, ou seja, Unicode (ou ISO 10646), o que significa que um grande número dos caracteres mundiais estarão disponíveis.

As discussões sobre a melhor forma de utilizar o Unicode na Internet ( RFC 2130, abril de 1997, e RFC 2070, janeiro de 1997) ainda não haviam sido concluídas quando o HTML 3.2 foi lançado (janeiro de 1997), por isso a inclusão do Unicode no HTML teve de esperar pelo lançamento do HTML 4.0 (dezembro de 1997).