A tecla de acesso 'n' salta para outro local na navegação da página. Saltar para o início do conteúdo.

Este documento é uma tradução. Se ocorrerem discrepâncias ou erros, o original em inglês mais recente terá precedência. Os direitos autorais originais pertencem à W3C, como indicado no final da página.

Tradutor: Maurício Samy Silva

s_gotoW3cHome Internacionalização
 

Escolha e uso de codificação de caracteres

Público alvo: Codificadores XHTML/HTML (usando editores ou scripts), desenvolvedores de scripts (PHP, JSP, etc.), criadores de CSS, gerentes de projetos para web e qualquer um iniciante necessitando de informações introdutórias relativas a escolha e aplicação de codificação de caracteres.

Pergunta

Que codificação de caracteres devo usar e como aplicá-la ao conteúdo que estou criando?

Informações

Conteúdo é composto de uma sequência de caracteres. Caracteres representam letras do alfabeto, pontuação, etc. Conteúdos são armazenados em um computador como uma sequência de bytes, que são valores númericos. Em alguns casos um simples caractere é representado por mais de um byte. Tal como os códigos usados em espionagem a maneira como uma sequência de bytes é convertida em caracteres depende da forma como o conteúdo foi codificado. Nesse contexto a forma é denominada codificação de caracteres.

Existem muitas formas de codificação de caracteres. Esse artigo informa como escolher e aplicar uma codificação de caracteres para o seu conteúdo, ou seja, como criar um documento devidamente codificado.

Para maiores informações sobre caracteres e codificação de caracteres ver o artigo Codificação de caracteres para iniciantes.

Resposta

Sempre que possível use UTF-8

Uma página HTML admite somente uma forma de codificação. Não é permitido codificar diferentes partes de um documento com diferentes formas de codificação.

Uma codificação Unicode tal como UTF-8 provê suporte para muitos idiomas, inclusive para qualquer mistura de idiomas em uma página ou formulários. O uso de UTF-8 elimina a necessidade de lógica no lado do servidor para determinar a codificação de caracteres individualizada para as diferentes páginas servidas ou dados recebidos de formulários. Assim, fica bastante reduzida a complexidade de criação de sites ou aplicações multi-línguas.

A codificação Unicode proporciona, mais do que qualquer outra codificação, a criação de páginas com conteúdos em vários idiomas.

Praticamente não existem barreiras ao uso de codificação Unicode nos dias atuais. De fato, no mês de agosto de 2010 o Google informou que mais de 50% dos vários bilhões de páginas nos seus servidores estão usando UTF-8. Se forem consideradas as páginas codificadas em ASCII (desde que ASCII é um subconjunto de UTF-8), a porcentagem cresce para quase 70%.

Existem três codificações de caracteres em Unicode: UTF-8, UTF-16 e UTF-32 (ver Conjunto de caracteres, conjunto de caracteres codificado, e codificação). Desses três UTF-8 é recomendado para o conteúdo web. O rascunho para a especificação da HTML5 atualmente diz o seguinte: "Autores são encorajados a usar UTF-8. Mecanismos verificadores devem alertar os autores sobre o uso de codificação do passado. Ferramentas de criação de conteúdos devem adotar codificação UTF-8 por padrão, para criação de novos documentos."

Convém notar que todo caractere ASCII em UTF-8 usa os mesmos bytes que a codificação ASCII e assim está em acordo com a interoperabilidade e a retrocompatibilidade.

Suporte para uma determinada codificação, especialmente uma codificação Unicode, não implica necessariamente que o agente de usuário deva renderizar corretamente o texto. Vários scripts, tais como os arábicos e hindus requerem regras adicionais para transformação de uma sequência de caracteres em uma sequência apropriada de fontes e glifos.

Se você não usar Unicode. Escolha uma codificação que proporcione ao máximo a opção de representar caracteres diretamente com um mínimo de necessidade de uso de caractreres escapados.

Quando a criação for para um determinado idioma, script, ou grupo de idiomas em particular, escolha a codificação mais apropriada para o caso e verifique se os agentes de usuário suportam a codificação escolhida.

Opte por uma solução que minimize a complexidade sempre que se tratar de conteúdos multi-línguas e scripts.

Evite estas codificações

A especificação para HTML5 aponta uma série de codificações que você deve evitar.

Documentos não devem usar JIS_C6226-1983, JIS_X0212-1990, HZ-GB-2312, JOHAB (Windows code page 1361), codificações baseadas na ISO-2022 e na EBCDIC. A razão é que elas permitem códigos ASCII para representar caracteres não ASCII o que compromete a segurança.

Documentos não devem usar codificação CESU-8, UTF-7, BOCU-1, ou SCSU, uma vez que eles não se destinam a conteúdos web.

A especificação também aconselha não usar UTF-32.

Uso de codificação no seu conteúdo

Como um autor de conteúdos você precisa verificar se o seu editor de textos e scripts está gravando os arquivos na codificação escolhida.

Desenvolvedores precisam assegurar-se de que as diferentes partes do sistema desenvolvido conseguem se comunicar entre si, entendendo a codificação de caracteres usada e provendo suporte para todas as codificações usadas.

É importante saber que simplesmente declarando a codificação de caracteres no documento ou no servidor, usando um dos métodos descritos a seguir não é suficiente; você precisa gravar o texto na codificação escolhida para ela ser aplicada ao conteúdo. (A declaração apenas fornece ao navegador uma dica de como interpretar a sequência de bytes na qual o texto foi gravado.)

O artigo Como definir a codificação em aplicativos de criação web fornece dicas de como gravar uma página em determinada codificação em diversos dispositivos.

Se for possível, o melhor é definir, no seu editor, por padrão para novos documentos uma codificação como UTF-8. A figura a seguir mostra como definir a codificação padrão para novos documentos no DreamWeaver.

O menu de preferências do DreamWeaver permite definir a codificação padrão para novos documentos.

Pode ainda haver a necessidade de se verificar se o servidor está servindo os documentos com a declaração HTTP apropriada, pois ela sobrescreve a declaração definida no documento (ver seção a seguir).

Por que o navegador não está reconhecendo a codificação?

Suponha que você gravou seus dados como UTF-8. Embora você tenha gravado seus dados com a codificação correta e tendo declarado na página que a codificação é UTF-8, é indispensável que o servidor envie no cabeçalho HTTP a codificação compatível.

As declarações HTTP sobrescrevem qualquer declaração na página e podem causar problemas de renderização do conteúdo.

Se você não tem controle sobre as declarações vindas do servidor entre em contato com o responsável pelo servidor. Por outro lado existem mecanismos capazes de solucionar o problema. Por exemplo: ver Configurando o parâmetro HTTP da codificação de caracteres (charset) para maiores informações sobre como alterar as informações sobre codificação de caracteres tanto localmente quanto para um conjunto de arquivos no servidor ou ainda para conteúdos gerados com linguagens de script.

Depois de usar um dos métodos descritos para configurar a codificação no cabeçalho HTTP você deverá verificar se o problema foi resolvido. Use a ferramenta W3C Internationalization Checker que informa qual a codificação de caracteres enviada pelo cabeçalho HTTP. Outra alternativa á a leitura do artigo Verificando o cabeçalho HTTP que aponta para outras ferramenta de verificação das informações passadas pelo servidor com respeito à codificação de caracteres.

Dê-nos a sua opinião (em inglês).

Subscreva uma alimentação RSS.

Novos recursos

Notícias na página principal

Twitter (Notícias na página principal)

‎@webi18n

Leitura complementar

Autor: Richard Ishida, W3C. Tradutor: Maurício Samy Silva.

XHTML 1.0 válida!
CSS válido!
Codificado em UTF-8!

Traduzido de conteúdo em inglês datado de 2010-08-12. Última versão traduzida modificada 2010-09-17 23:17 GMT

Para obter o histórico de alterações do documento, faça uma busca por qa-choosing-encodings no blog da i18n.