quarta-feira, 30 de maio de 2007

Codificação de caracteres

Texto obtido de reportagem da Revista W (www.revistaw.com.br) Ano 7 Nº 82

--

A codificação de caracteres é o sistema pelo qual letras, dígitos e outros simbolos são expressos como valores numéricos que um computador pode entender. Um arquivo (como um documento HTML, por exemplo) é salvo com uma codificação específica. Essa informação é enviada para o navegador e outros agentes de usuário para que os bits e os bytes possam ser interpretados corretamente. Se a codificação declarada não bate com a que está sendo usada, o browser irá trocar vários caracteres de sua página, deixando-a ilegível - tanto para os internautas como para os mecanismos de busca.

Essa reportagem fala sobre as opções de codificação e sobre o que acontece quando é feita uma escolha errada. Essa decisão afeta a quantidade de caracteres que você pode usar em uma página. Letras latinas são normais raramente são um problema, mas algumas linguagens precisam de mais letras que outras. Há também idiomas, como o nosso português, que possuem vairações como acentos e cedilha. Além disso, é claro, existem linguagens que não usam nenhuma letra latina. Se você deseja qua a pontuação e símbolos especiais apareçam corretamente, a escolha da codificação se torna crítica.

DOCUMENTOS WEB

Alguns fatores devem ser levados em consideração antes de escolher uma forma de codificação para a sua página. Entre eles estão o conjunto de caracteres a ser usado, com que codificação o seu editor salva arquivos e quais codificações são suportadas pelos navegadores dos visitantes do site.
O primeiro parâmetro que deve ser considerado é a quantidade de caracteres que você irá precisar. Obviamente, um site escrito em uma única linguagem usa um conjunto de caracteres mais limitado que um multilíngüe - especialmente um que misture caracteres latinos com cirílicos, gregos, hebreus, arábicos e assim por diante.
Se você deseja usar aspas, traços e outros tipos de pontuação de modo tiporaficamente correto, as codificações "normais" irão falhar. O mesmo pode ser dito a respeito de símbolos matemáticos ou outros caracteres especiais.
Alguns desenvolvedores preferem usar editores como o Bloco de Notas ou o Vim (www.vim.org) para criar suas páginas. Outros optam por ferramentas WYSIWYG como o Dreamweaver. Indiferente de preferências pessoais, a escolha do editor afeta a escolha da codificação. Alguns deles podem salvar apenas com um tipo de codifivação e não vão nem mesmo lhe informar qual. Outros podem salvar em dezenas de codificações diferentes, mas requerem que você saiba qual delas irá preencher suas necessidades.
Mas o seu fluxo de publicação não consiste apenas em um editor. Sempre há um servidor web no final da corrente, mas podem existir outros componentes no meio: bancos de dados, linguagens de programação, frameworks e servidores de aplicação, por exemplo. Cada um desses componentes pode afetar a sua escolha de codificação. Talvez o banco de dados suporte apenas um tipo específico; o mesmo pode ocorrer com a linguagem de criação de scripts.
Não é possível aqui enumerar as capacidades de todos os diferentes editores, bancos de dados e outros aplicativos nesta reportagem, simplesmente porque há muitos deles. Você precisará olhar a documentação antes de escolher a codifivação az usar. Algumas delas, como US-ASCII, as séries ISO 8859 e UTF-8, são amplamente suportadas, outras não. É sempre melhor evitar codificações mais excêntricas, especialmente em sites que são direcionados a audiências internacionais.

BREVE HISTÓRIA DA CODIFICAÇÃO

Os primeiros computadores não tinham uma codificação padronizada de caracteres. Isso, porém, não importava muito, já que os computadores raramente se comunicavam uns com os outros na época. Quando a comunicação entre computadores se tornou possível, a necessidade da criação de padrões tornou-se aparente. Um dos mais comuns era o EBCDIC. Outro que se popularizou foi o American Standard Code for Information Interchange, também conhecido como ASCII. A versão norte-americana, US-ASCII, foi padronizada como ISO-646.
O ASCII usa apenas sete bits (zeros e uns), o que significa que esse conjunto tem 128 posições, de 0 ao 127. A faixa 0-31 é reservada para controles C0 (quebras de linha e espaços, por exemplo) e a posição 127 é reservada para o DEL (delete). Isso deixa um total de 95 caracteres imprimíveis. Isso é o suficiente para o alfabeto do inglês em caixa alta e em caixa baixa, mais os dígitos e sinais comuns de pontuação (e alguns menos comuns). Mas não há espaço suficiente para conter caracteres acentuados necessários em muitas linguagens européias, deixando na mão qualquer idioma que não use letras latinas.
Assim foram criadas diversas versões do ASCII, mutuamente incompatíveis que não funcionam para trocas de dados internacionais.
A série ISO 8859 foi uma tentativa de fornecer alternativas para linguagens além do inglês. Trata-se de uma espécie de ASCII turbinado, com os mesmos 128 pontos de código iniciais em todas suas versões. O ISO 8859, porém, usa oito bits e assim pode representar 256 caracteres (0-255). A faixa que vai de 128 a 159 é reservada a caracteres de controle C1 (semelhantes aos controles C0, porém menos usados).
A versão mais comum para linguangens ocidentais, inclusive o português, é o ISO 8859-1, também conhecido como Latin-1. Ela contém uma série de versões acentuadas de vogais, além de diversos caracteres especiais. Os países da Europa aodtaram o ISO 8859-15, que acomoda o sinal do Euro.
A Microsoft - que normalmente não adota padrões de outros quando pode criar os próprios - também cunhou algumas codificações de caracteres. Essas eram chamados de "code pages" no DOS e CP850 era o padrão usado para linguagens ocidentais.
Um dos sistemas de codificação mais comuns da Microsoft é conhecido como Windows-1252. Mesmo sendo muito semelhante aos ISO 8859-1, ele não é idêntico. A faixa reservada para os caracteres de controle C1 nas codificações ISO é usada pela Microsoft para fornecer alguns caracteres úteis que não estão disponíveis nas séries ISO, como aspas e traços tipologicamente corretos.
Codificações específicas foram criadas para linguagens que não utilizam caracteres latinos. O problema é que não havia uma que pudesse ser usada para combinações dessas linguagens.

UNICODE

A solução para esse problema é chamada Unicode - um repertório que contém a maioria dos caracteres usados nas linguagens do mundo. Ele pode acomodar milhões de caracteres e já contém centenas de milhares. O Unicode é dividido em "planos" de 64K cada. O mais usado é o primeiro plano, conhecido como plano multilíngüe básico (BMP - Basic Multilingual Plane). Os primeiros 256 pontos de código no Unicode são compatíveis com o ISO 8859-1, o que também significa que seus primeiros 128 pontos são compatíveis com US-ASCII. Os pontos de código no unicode são escritos no formato hexadecimal, precedido um "U" maiúsculo e um sinal de mais. Por exemplo, U+0041 refere-se ao "A latino maiúsculo".
A International Organization for Standarlization (ISO) padronizou uma versão do Unicode que foi chamada ISO 10646 (o número não é uma coincidência, compare-o com o ISO 646 do US-ASCII). Há algumas pequenas diferenças entre o Unicode e o ISO 10646.
O ISO 10646 é importante porque é usado pelo HTML. Mas ele é apenas um repertório, por isso é necessária uma codificação para companhá-lo. Como um repertório pode representar milhões de pontos de código, uma codificação um a um seria muito ineficiente. Seriam precisos 32 bits para cada caractere - um grande desperdício para linguagens ocidentais. Se 32 bits equivalem a quatro octetos, cada octeto é um agrupamento de 8 bits similar, mas não idêntico, a um byte.
Há uma codificação referente ao Unicode denominada UTF-32, que raramente é usada. Outra é o UTF-16, que usa dois octetos para cada caractere. Essa também não chegou nem perto de se tornar popular. Em vez disso, uma codificação mais eficiente, principalmente para linguagens ocidentais, conhecida como UTF-8 (8-bit Unicode Transformation Format), tornou-se muito utilizada. Ela usa um número variáveil de octetos para representar caracteres diferentes. A faixa ASCII (U+0000 até U+007F) usa uma codificação um a um. Para outros caracteres, dois, três ou quatro octetos são necessários. Na teoria, o UTF-8 pode empregar até seis octetos para codificar certos caracteres.

ESCOLHA SUA CODIFICAÇÃO

Para um site apenas em inglês, isso não importa muito. A menos que o autor queira usar alguma pontuação tipograficamente correta, como aspas francesas, o velho ASCII é suficiente. O ISO 8859-1, porém, acabou se tornando uma espécie de padrão para sites ocidentais e oferece maiores possibilidades.
Para sites em português e linguagens como francês, espanhol, italiano, alemão, norueguês, dinamarquês ou finlandê, o padrão ISO 8859-1 funciona satisfatoriamente. Os que precisam dos diacríticos do tcheco e do polonês, ou alfabetos completamente separados como grego ou cirílico, podem optar por outras versões da série ISO 8859.
Como foi mencionado anteriormente, codificações especializadas existem para o hebreu, arábico ou letras manuscritas orientais. Mas há casos em que você precisa misturar inglês, russo, grego e japonês no mesmo site oumesmo na mesma página.
É recomendável usar o UTF-8 sempre que for possível, já que ele pode representar qualquer caractere do repertório ISO 10646. Mesmo que você escreva apenas em inglês, o UTF-8 lhe dá acesso a diversos tipos de traços e marcações. E se você precisar escrever em grego ou japonês, com o UTF-8 é possível fazer isso sem precisar se preocupar com entidades e NCRs. Num site multilíngüe, é possível usar diferentes codificações nas páginas, mas a manutenção disso se tornaria um pesadelo. Por isso, é uma boa idéia usar o UTF-8 e parar de se aborrecer com o problema.

--

REFERENCIAS DE CARACTERES

Se precisar usar um caractere que não pode ser representado pela codificação que você escolheu, você pode recorrer a entidades HTML ou a referências numéricas de caracteres (NCR - Numeric Character References). Uma entidade é um nome simbólico para um caractere particular, como o © para o símbolo ©. Esse tipo de referência sempre deve começar com um 'e comercial' (&) e teminar com ponto-e-virgula (;). Já o NCR usa um número para referenciar o caractere. Assim, o NCR para o símbolo © é © (decimal) ou © (hexadecimal). Entidades e NCRs funcionam tão bem quanto caracteres literais, mas usam mais bytes e tornam o código fonte mais difícil de ler. Além disso, são mais propensos a erros.

REPERTÓRIO DE CARACTERES

Um conjunto de caracteres distintos, sem uma apresentação específica para computadores. O repertório por si nem mesmo define uma ordem para esses caracteres.

DIACRÍTICOS

Um diacrítico é um sinal ou acento que se coloca sobre, sob ou através de uma letra para alterar o seu som o upara marcar qualquer outra característica lingüística.

0 comentários: