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 ao W3C, como indicado no final da página.

Tradutor: Alan Henrique Pardo de Carvalho, FATEC São Caetano

s_gotoW3cHome Internacionalização
 

Codificação de caracteres para iniciantes

Público alvo: autores, usuários, qualquer um que não tenha certeza sobre o que é a codificação de caracteres e queira ter um breve resumo de como ela nos afeta.

Nota: Depois que este documento foi traduzido, alterações foram feitas no documento original em inglês. Consulte o relatório das alterações.

Pergunta

O que é codificação de caracteres e por que eu deveria me preocupar com isso?

Resposta

Primeiro, por que eu deveria me preocupar?

Se você usa qualquer coisa além das mais básicas letras e números do alfabeto Inglês, as pessoas podem não ser capazes de ler seu texto a menos que você informe qual codificação de caracteres está utilizando.

Por exemplo, você pode querer que seu texto se pareça com isso:

mojibake1.gif

mas ele pode na verdade ser exibido assim:

mojibake2.gif

Não apenas fazendo com que a leitura do texto exibido seja prejudicada com a informação sobre a codificação inadequada, mas isso pode significar que seus dados não poderão ser encontrados em uma pesquisa e nem processados adequadamente em uma série de outros exemplos.

Então o que é codificação de caracteres?

Palavras e frases no texto são criadas a partir de caracteres. Exemplos de caracteres incluem as letras latinas á ou os ideogramas chineses ou ainda os caracteres Devanagari .

Você pode não poder visualizar alguns dos caracteres nesta página porque pode não ter as fontes necessárias. Se você clicar nos lugares onde espera ver um caractere verá um link para uma versão gráfica. Essa página está codificada em UTF-8.

Caracteres são agrupados em conjuntos de caracteres (também chamados de repertório) Isso é então chamado de conjunto de códigos de caracteres quando a cada caractere é atribuído um número em particular, chamado de codepoint. Esses codepoints irão ser representados no computador por um ou mais bytes.

Basicamente, isso significa que todos os caracteres são armazenados em computadores utilizando-se códigos, semelhante às cifras usadas na espionagem. Uma codificação de caracteres é uma chave para destravar (i.e. quebrar) o código. É um conjunto de relações entre os bytes que representam números no computador e caracteres no conjunto de caracteres codificado. Sem a chave, os dados parecem como lixo.

O termo charset é freqüentemente usado para referir-se na verdade ao que são as codificações de caracteres. Você deveria abster-se do uso desse termo e usar o termo codificação de caracteres sempre que puder.

Infelizmente, há muitos conjuntos de caracteres e codificações de caracteres, i.e. muitas formas diferentes de relacionar bytes, codepoints e caracteres. O quadro a seguir fornece maiores detalhes para os interessados.

Por exemplo, no conjunto de código de caracteres denominado ISO 8859-1 (também conhecido como Latin1) o valor decimal de codepoint value para a letra é é 233. No ISO 8859-5, o mesmo codepoint representa o caractere cirílico щ. Esses conjuntos de caracteres contém menos de 256 caracteres e relacionam os codepoints para valores de bytes diretamente. Então um codepoint com o valor 233 é representado por um byte simples com o valor de 233. Note entretanto que aquele byte pode representar tanto é ou щ, dependendo do contexto.

Há outras maneiras de manipular caracteres em scripts. Por exemplo, com o conjunto de caracteres Unicode, você pode representar ambos os caracteres no mesmo conjunto. De fato, Unicode contém, em um simples conjunto, mais caracteres do que você provavelmente precisará. Enquanto o valor 233 ainda representa o é, o caractere cirílico щ agora tem um valor de codepoint 1097. Esse é um número muito grande para ser representado por um único byte*. Se você usar a codificação de caracteres para texto Unicode denominada UTF-8, щ será representado por dois bytes, mas o valor de codepoint não será simplesmente derivado do valor dos dois bytes em conjunto - alguma decodificação complicada será necessária. Outros caracteres Unicode se relacionam a um, três ou quatro bytes na codificação UTF-8.

UTF-8 é a forma mais amplamente utilizada para representar texto Unicode nas páginas da Web. Mas UTF-8 é somente uma das possíveis formas de codificar caracteres Unicode. Em outras palavras, um simples codepoint no conjunto de caracteres Unicode pode realmente ser relacionado a diferentes seqüências de bytes, dependendo de qual codificação foi utilizada para o documento. Codepoints Unicode pode ser relacionados a bytes usando qualquer uma das codificações denominadas UTF-8, UTF-16 or UTF-32. O caractere Devanagari , com codepoint 2325 (que é 915 em notação hexadecimal), será representado por dois bytes quando usar a codificação UTF-16 (09 15), três bytes com UTF-8 (E0 A4 95), ou quatro bytes com UTF-32 (00 00 09 15).

* Muitos bytes são compostos por 8 bits. Há somente 28 (i.e. 256) formas diferentes de combinar 8 bits.

Note também que os números de codepoint são comumente expressos em notação hexadecimal - i.e. base 16. Por exemplo, 233 na forma hexadecimal é E9. Os valores de codepoint Unicode são tipicamente escritos na forma U+00E9.

Pode haver outras complicações além das descritas no quadro acima (tais como ordem de bytes e seqüências de escape), mas os detalhes descritos mostram por que é importante que a aplicação com a qual você está trabalhando saiba qual codificação de caracteres é apropriada para seus dados, e saiba lidar com essa codificação.

Na maior parte do tempo, entretanto, você não precisa conhecer os detalhes. Você só precisa estar certo de que considerou o aviso na seção Como isso me afeta? abaixo.

Como as fontes ajustam-se a isso?

Uma fonte é um conjunto de definições de glifos, i.e. definições de formas usadas para exibir caracteres.

Uma vez que sua aplicação lidou com os caracteres que usará, eles então irão aparecer como os glifos da fonte de forma adequada para exibir ou imprimir os caracteres. (Claro, se a informação de codificação estiver incorreta, irão aparecer glifos incorretos para os caracteres.)

Uma fonte irá geralmente abranger um conjunto simples de caracteres, ou no caso de um grande conjunto de caracteres como Unicode, somente um subconjunto de todos os caracteres. Se sua fonte não tiver um glifo para um caractere em particular, algumas aplicações irão procurar pelo caractere faltante em outras fontes do seu sistema (o que significará que o glifo irá aparecer de forma diferente à do texto ao redor, tal como numa nota de resgate). Em muitos outros casos você verá um pequeno quadrado, um ponto de interrogação ou algum outro caractere. Por exemplo:

mojibake3.gif

Como isso me afeta?

Como um autor de conteúdo ou desenvolvdor, você precisa escolher a melhor codificação de caracteres para seu conteúdo ou dados. Codificação Unicode é freqüentemente uma boa escolha aqui, desde que você use uma única codificação para manipular os caracteres de que necessita. Isso simplifica enormemente as coisas. Usando Unicode em seu sistema também eliminará a necessidade de acompanhar e converter entre diversas codificações de caracteres.

Autores de conteúdo precisam verificar que codificação seus editores ou scripts estão usando no salvamento dos arquivos, e como salvar o texto na codificação de sua escolha. Note, entretanto, que somente declarar uma codificação diferente não irá modificar os bytes; você precisa salvar o texto nessa codificação também.

Autores de conteúdo também precisam encontrar como declarar a codificação de caracteres usada para o formato de documento com o qual estão trabalhando. Você também precisa verificar se seu servidor servirá documentos com as declarações HTTP corretas.

Desenvolvedores precisam assegurar-se de que as várias partes do sistema podem comunicar-se umas com as outras, entendendo quais codificações de caracteres estão sendo utilizadas e fornecendo suporte a todos os caracteres e codificações necessárias.

Os links na próxima seção fornecerão alguma informação adicional para leitura sobre esses tópicos.

A propósito

The article Character encodings: Essential concepts is worth a read at this point, as it provides some gentle introductions to related topics, such as Unicode, UTF-8, Character sets, coded character sets, and encodings, the document character set, character escapes and the HTTP header.

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: Alan Henrique Pardo de Carvalho, FATEC São Caetano.

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

Traduzido de conteúdo em inglês datado de 2008-01-31. Última versão traduzida modificada 2008-04-09 7:22 GMT

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