Esqueci a senha

Campus Online

Encodes e Charsets

Encodes e Charsets

Tabelas de código de caracter

É preciso que nos lembremos agora que essas máquinas monstruosas que chamamos de computadores trabalham com um código interno muito simples de zeros e uns. Como você sabe, esses dígitos, zeros e uns, chamam-se bits, e foram arbitrariamente agrupados de oito em oito. Cada grupo de oito se chama byte e representa um número entre 0 e 255. E é só isso que temos. Tudo num computador é feito desses números. Um "formato" de imagem, como BMP, GIF ou JPG, é uma maneira de se codificar as informações de cor de cada bit de uma imagem, em uma sequência de números. A mesma coisa com "formatos" de áudio, documentos, gráficos e tudo mais. O texto também tem "formatos" diferentes, maneiras de se converter o que você digita em números. Esses formatos são chamados de tabelas de caracteres, conjuntos de caracteres ou "charsets".

O computador pessoal se desenvolveu na mão de nossos amigos norte-americanos, que não precisam de acentos. Assim, a primeira tabela de caracteres adotada em larga escala, a ASCII (sigla para Código Padrão Americano para Intercâmbio de Informações), não continha acentos. Além disso, era um código de 7 bits, e não 8. Ou seja, ao invés de 256 posições, a tabela ASCII tinha apenas 128 posições. Segue uma cópia da tabela ASCII original para você ver como é (não se preocupe, você não precisa decorá-la):

  • 00 - (NUL)
  • 01 - (SOH)
  • 02 - (STX)
  • 03 - (ETX)
  • 04 - (EOT)
  • 05 - (ENQ)
  • 06 - (ACK)
  • 07 - (BEL)
  • 08 - (BS)
  • 09 - (HT)
  • 10 - (LF)
  • 11 - (VT)
  • 12 - (FF)
  • 13 - (CR)
  • 14 - (SO)
  • 15 - (SI)
  • 16 - (DLE)
  • 17 - (D1)
  • 18 - (D2)
  • 19 - (D3)
  • 20 - (D4)
  • 21 - (NAK)
  • 22 - (SYN)
  • 23 - (ETB)
  • 24 - (CAN)
  • 25 - (EM)
  • 26 - (SUB)
  • 27 - (ESC)
  • 28 - (FS)
  • 29 - (GS)
  • 30 - (RS)
  • 31 - (US)
  • 32 - (Espaço)
  • 33 - !
  • 34 - "
  • 35 - #
  • 36 - $
  • 37 - %
  • 38 - &
  • 39 - '
  • 40 - (
  • 41 - )
  • 42 - *
  • 43 - +
  • 44 - ,
  • 45 - -
  • 46 - .
  • 47 - /
  • 48 - 0
  • 49 - 1
  • 50 - 2
  • 51 - 3
  • 52 - 4
  • 53 - 5
  • 54 - 6
  • 55 - 7
  • 56 - 8
  • 57 - 9
  • 58 - :
  • 59 - ;
  • 60 - <
  • 61 - =
  • 62 - &gt/
  • 63 - ?
  • 64 - @
  • 65 - A
  • 66 - B
  • 67 - C
  • 68 - D
  • 69 - E
  • 70 - F
  • 71 - G
  • 72 - H
  • 73 - I
  • 74 - J
  • 75 - K
  • 76 - L
  • 77 - M
  • 78 - N
  • 79 - O
  • 80 - P
  • 81 - Q
  • 82 - R
  • 83 - S
  • 84 - T
  • 85 - U
  • 86 - V
  • 87 - W
  • 88 - X
  • 89 - Y
  • 90 - Z
  • 91 - [
  • 92 - \
  • 93 - ]
  • 94 - ^
  • 95 - _
  • 96 - `
  • 97 - a
  • 98 - b
  • 99 - c
  • 100 - d
  • 101 - e
  • 102 - f
  • 103 - g
  • 104 - h
  • 105 - i
  • 106 - j
  • 107 - k
  • 108 - l
  • 109 - m
  • 110 - n
  • 111 - o
  • 112 - p
  • 113 - q
  • 114 - r
  • 115 - s
  • 116 - t
  • 117 - u
  • 118 - v
  • 119 - w
  • 120 - x
  • 121 - y
  • 122 - z
  • 123 - {
  • 124 - |
  • 125 - }
  • 126 - ~
  • 127 - (DELETE)

Com a popularização do computador ao redor do mundo, a necessidade de se usar acentos e caracteres de outros idiomas fez surgir uma infinidade de outras tabelas de caracteres. Felizmente, a esmagadora maioria delas segue a tabela ASCII nas primeiras 128 posições, ou seja, um texto em ASCII, escrito em inglês (ou em "portugues sem acentuacao") será lido em qualquer computador ao redor do mundo. Mas, ao usar acentos, é necessário que o texto salvo numa tabela específica seja lido usando aquela mesma tabela.

Começam os nossos problemas

Você precisa sempre indicar em que página de código você salvou seu texto. Talvez você faça o teste aqui e descubra que seus HTML parecem funcionar bem sem nenhuma indicação de página de código. Mas lembre-se que você está usando um computador em português ou num outro idioma ocidental, onde a página de código padrão provavelmente é a windows-1252, padrão em sistemas Windows em português, a iso-8859-1, padrão em muitas distribuições Linux em português, ou utf-8, e seu navegador está configurado para testar essas tabelas primeiro quando um documento não tiver indicação de charset. Mas nada garante que, sem indicar explicitamente o charset utilizado, seu documento vá funcionar, por exemplo, num Windows em japonês ou num Linux em hebraico. Geralmente quando digo isso, alguém pergunta: quem vai querer visitar meu site num computador em japonês ou hebraico? Quem sabe um brasileiro morando no Japão ou você mesmo visitando Israel nas férias.

Indicando o Charset

O primeiro passo é saber em que charset está salvo seu HTML. A maioria dos editores de código possuem maneiras de se configurar em qual charset salvar o documento. Se o seu não possui isso, por favor, troque de editor. Na maioria dos editores essa opção fica na caixa de diálogo "Salvar Arquivo" para o arquivo atual, e há uma opção para alterar o charset padrão em algum lugar. No Dreamweaver, para o arquivo atual, fica em Modify > Page Properties > Document Encoding, e para definir o padrão do editor em Edit > Preferences.
Uma vez que você sabe em que charset seus documentos estão salvos, pode indicar isso de três maneiras diferentes:

Através do cabeçalho HTTP Content-type
Isso envolve configurar seu servidor web e não é trabalho para qualquer um. Se você trabalha para um grande site, porém, é a maneira mais prática de se resolver o problema, pois terá que fazer isso apenas uma vez, além, é claro, de se assegurar que todos os seus documentos estão salvos no charset escolhido. Se, porém, trabalha com diversos projetos, pode ser uma dor de cabeça ter que configurar vários servidores e lidar com isso em sites diferentes.
Através do prolog xml
Colocando na primeira linha do seu documento o código:
<? xml version="1.0" encoding="iso-8859-1" ?>
E, naturalmente, trocando iso-8859-1 pelo charset com o qual você for trabalhar. Evite este método. Para usá-lo você terá que contornar uma série de problemas com o Internet Explorer.
Através da tag meta Content-type
Com o seguinte código:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
Aqui também, trocando iso-8859-1 pelo charset escolhido. Se você não tem acesso às configurações do servidor, trabalha com muitos projetos diferentes, em servidores diferentes, ou não pode se assegurar de que todos os documentos em seu servidor serão servidos usando o mesmo charset, este é o método para você.
Escolhendo o charset ideal para você

A maioria das tabelas de caracteres que usamos hoje foram criadas para um idioma específico e são, por isso, muito limitadas. Por exemplo, a tabela Shift-JIS para japonês, muito popular, não possui caracteres hebraicos. Já a cp-1255 para hebraico não possui caracteres japoneses. Isso é um grande problema se você tiver que fazer um site que use os dois idiomas. Por exemplo, um curso de hebraico para japoneses. Será também um problema se você tiver que fazer um site ou sistema com suporte a diversos idiomas. Por exemplo, um sistema de blog projetado para uso internacional.

Para resolver estes problemas foi criado o Unicode, uma tabela de caracteres imensa, com suporte a cerca de um milhão de caracteres. Com Unicode você pode escrever chinês, hebraico, coreano, francês, japonês e russo num mesmo documento. Você pode escrever Unicode usando quatro tabelas de caracteres diferentes. Apesar disso, muitos navegadores e sistemas operacionais em uso hoje são compatíveis com apenas uma delas, a utf-8. Por isso, nossa recomendação é que você, onde for possível, trabalhe com utf-8.

E onde não seria possível? Se o site já está no ar, é necessário avaliar primeiro a possibilidade e o custo, em horas de trabalho, de converter tudo para utf-8. Abrir os arquivos um por um e salvar pode não ser uma opção. Nesse caso um bom programador pode ajudar. Não é difícil fazer um script que converta um diretório inteiro de um charset qualquer para utf-8. Se você tem um sistema legado por trás, uma infra-estrutura complexa, ou não consegue convencer o restante da equipe, ou o seu chefe a usar unicode, pode ter que se conformar com outro charset. Sim, porque se você configura seu editor para usar utf-8 como padrão, mas seus colegas continuam usando iso-8859-1, vocês terão problemas ao abrir e salvar os arquivos um do outro, principalmente ao trabalhar com includes.

De qualquer maneira, não se esqueça de indicar o charset usado com um dos métodos que mostramos acima, para ter certeza de que todos verão seu texto do jeito que ele é.