Charsets e encodings

Por: Henrique Costa PereiraMonday 10 April 2006 às 13:10

Introdução

Dividi o assunto de charsets e encodings em uma série de artigos que poderão ser acessados (a medida que forem publicados) apenas clicando na tag charset-e-encoding. A lista dos textos em ordem é a seguinte:

  1. Charsets e encodings
  2. Declarando encodings em XHTML
  3. Usando entities e referências numéricas de caracteres – NCR
  4. Configurando encodings em ferramentas de desenvolvimento
  5. Declaração de codificação de caracteres por CSS

Enquanto escrevia este texto, aos poucos ele foi tomando dimensões maiores do que eu esperava. Um hyperlink me levou a um documento, um documento me levava a outro, cada vez mais longe e assim por diante. Vários trechos são traduções pessoais dos documentos originais mesclados com partes de minha própria autoria. Todas as referências foram citadas em seus devidos trechos e a maioria foi comentada no tópico referências, no final de cada artigo.

Espero que nestes artigos você encontre tudo o que precisa saber sobre charsets e encodings em um verdadeiro dossiê sobre o assunto. Sua opinião e seus comentários continuam sendo muito valiosos. Aguardo seu feedback.

Conceitos

Para saber utilizar charsets e encodings de forma mais madura e menos arriscada, é necessário compreender alguns conceitos e definições para poder entender tudo o que precisa sobre codificação de caracteres em linguagens de marcação como o XML e HTML. Então vamos aos conceitos.

Charset

Charset significa “conjunto de caracteres” (character set), e é comumente referênciado apenas como “charset”. Os charsets foram feitos como uma biblioteca de caratecteres que podemos utilizar, para serem utilizados com propósitos gerais em computadores, softwares, browsers etc.

Os charsets mais conhecidos são os da série ISO-8859 (ISO-8859-1, ISO-8859-2, ISO-8859-3, …, ISO-8859-10) e os da família Unicode (UTF-8, UTF-16, UTF-32).

Code Caracter Set (code points)

Em cada conjunto de caracteres (charsets), para cada caractere existe um número único designado para identificação. Essas unidades númericas são chamadas de “code points“. Por exemplo a letra “a” no encoding ISO 8859-1 está na posição de número 65, e assim por diante com cada caractere do conjunto.

Encoding

O “character encoding”, ou apenas “encoding” é a maneira com que os conjuntos de caracteres são mapeados e manipulados pelas máquinas, seja um software, seja um browser etc. Vamos entender como isto funciona.

No encoding ISO 8859-1 a letra “A” está na posição 65º (começando do zero) e pode ser representado no computador usando um único byte com valor de 65. Para o ISO 8859-1 isso nunca muda. Para os encodings da série unicode, as coisas não são tão diretas assim. Embora o code point para a letra “à” no charset unicode seja sempre 255 (em decimal), ele pode ser representado em um computador por 1, 2 ou até 4 bytes, dependendo do encoding utilizado (UTF-8, UTF-16 ou UTF-32). Ou seja, usando o charset unicode, é possível que um caractere seja codificado de formas diferentes dependendo do encoding escolhido.

O XML e o HTML (da versão 4 em diante), foram criados com um modelo lógico na forma como são processados, baseados no Unicode. Isso não significa que todo HTML e todo XML deve ser codificado com algum encoding da série Unicode. Significa entretando que os documentos podem conter somente caracteres definidos pelo unicode. Qualquer caractere pode ser codificado em um documento contanto que ele seja um subconjunto do repertório do unicode. No nosso caso que utilizamos caracteres latinos, uma outra soluções aceitável para ser utilizada no lugar de algum encoding da série unicode seria o ISO-8859-1, onde todos seus caracteres, também fazem parte da série unicode.

Unicode

Unicode é um conjunto de caracteres (”character set” ou apenas “charset”), ou seja um padrão que define em um único conjunto, todos os caracteres necessários para escrever a maioria das línguas atuais em uso em computadores hoje. O unicode tem o objetivo de ser um super conjunto de todos os caracteres já codificados em outros conjuntos.

Existe um consórcio internacional sem fins lucrativos, fundado só para ampliar e promover o uso do unicode no mundo. Leia sobre o consórcio em português para mais informações.

É importante distinguir a diferença entre conjunto de caracteres (”character set” ou apenas “charset”) e codificação de caracteres (”character encoding” ou apenas “encodings”), que justifica o título deste artigo. O unicode é um tipo de charset, ou seja, um tipo de conjunto de caracteres dentre outros, como os da série ISO-8859. E dentro do charset unicode, existem 3 encodings conhecidos como UTF-8, UTF-16, UTF-32 que podem ser utilizados. O encoding UTF-8 da série unicode é a recomendação mais amplamente utilizada.

Todo o jargão necessário para entender charsets e encodings foi definido aqui. Nos próximos textos vamos ver uma aplicação mais prática sobre este assunto e a melhor forma de configurar encodings nos seus projetos.

Referências:

Se você está acostumado a desenvolver user agentes (apenas por diversão) e realmente precisa se aprofundar sobre este assunto o texto UTF-8, a transformation format of ISO 10646 de Yergeau e Character Set considered harmful de Dan Connolly do MIT são dois textos obrigatórios que pode tirar suas noite de sono.

Este texto não pode ser copiado ou reproduzido em nenhum outro site na íntegra sem autorização do autor!. Mais detalhes sobre licença de uso aqui!

Tags: HTTP ISO-8859-1 UTF-8 User Agent W3C XHTML XML ampersand character charset charset-e-encoding encoding entitie mime-type quirks-mode text-html unicode xhtml+xml

16 Comentários para “Charsets e encodings”

# 1° Felipe Ranieri Monday 10 April 2006 às 09:10 PM GMT

Olá Henrique, bastante interessante o artigo, com certeza uma ótima base para quem está iniciando a carreira, assim como eu.
Abraços!

# 2° Ciro Feitosa Monday 10 April 2006 às 10:10 PM GMT

Muito bom seu artigo. Boa base sobre o assunto. Parabéns. Abraço!

# 3° Usando entities e referências numéricas de caracteres - NCR » Revolução Etc Wednesday 12 April 2006 às 11:12 AM GMT

[...] Numeric Charactere Reference (NCR) hexadecimal. Todos os NCRs começam com ampersand e um sharp/sustenido (&#) e terminam com ponto e vírgula ( ; ). O carcatere “x” indica que os caracteres seguintes são hexadecimais e representam de forma escalar os valores de um caractere unicode, isto é, o número designado no mapa de códigos (code point) do conjunto unicode. O NCR hexadecimal não é case-sensitive. [...]

# 4° tarcísio lima Wednesday 31 May 2006 às 04:31 PM GMT

prezado sr. henrique,

sou totalmente leigo em informática, seus sistemas, suas codificações, etc… mas, mesmo como leigo, quanto aos assuntos específicos dessa área, sou um usuário do dia-a-dia, por, no mínimo, 8 ou mais horas! sou músico. e esperantista. como esperantista, uso com freqüência caracteres especiais que obtenho lançando mão de recursos do “word” ou através do uso da tecla “alt”, em associação com um certo número. p-ex.: as reticências que usei há pouco resultam de , nas fontes comuns.
minha pergunta é: como faço para usar os caracteres em unicode? p-ex.: conforme o mapa de caracteres, na fonte “times new roman” a letra G (g maiúsculo) com circunflexo tem o código . o que vem a ser esse “U+”? como eu poderia usar essa letra em qualquer programa de texto?
de antemão, obrigado.
tarcísio lima

# 5° Links comentados via del.icio.us - 5 » Japs Monday 30 October 2006 às 03:30 PM GMT

[...] O quinto link de hoje: são dois Entendendo Unicode e os Character Encodings e Charsets e encodings que tratam sobre charsets e encodings, vale a leitura de ambos. [...]

# 6° Wagner Elias - Think Security First » Blog Archive » XML Firewall Sunday 6 May 2007 às 02:6 AM GMT

[...] os desenvolvedores web eu recomendo fortemente os excelentes artigos, Charset e Encoding e XHTML Media Types escrito por Henrique C. Pereira do Revolução Etc e Entendendo um pouco mais [...]

# 7° Language Tags » Revolução Etc Sunday 26 August 2007 às 04:26 PM GMT

[...] com codificação de caracteres (character encodings) que eu já escrevi a respeito aqui em uma série de 5 artigos. Por mais que character encodings também seja um assunto do i18n, encodings trata-se da [...]

# 8° Luciano Fernandes Wednesday 14 November 2007 às 05:14 PM GMT

O que se faz quando qualquer encoding dá pau no internet explorer? Isto é, montei um site, coloquei o charset pra ISO-8859-1 tanto no html, no inicio do arquivo de css, no head em classes php, e na configuração do banco de dados. Tá aparecendo legal no firefox, mas no IE tá aparecendo caracteres estranhos. eu fiz a mesma coisa para UTF-8 e piorou, pois o firefox passou a dar problema também.

Isso tem solução ou devo sentar e chorar?

OBS: Muitas páginas de portais como o Terra tem esse mesmo problema.

# 9° Começando um blog no WordPress - parte 1 : Jean Carlo Tuesday 19 February 2008 às 11:19 PM GMT

[...] ótimo artigo para se inteirar a respeito de Charsets e Encodings é este aqui do Revolução [...]

# 10° Tutorial Iniciante de HTML: Tags, Atributos e Elementos « Codando Friday 21 March 2008 às 09:21 PM GMT

[...] ao navegador qual o conjunto de caracteres do conteúdo sendo enviado. Leia esse texto sobre conjuntos de caracteres. Quando você envia texto com caracteres acentuados ou ç, você deve especificar o charset UTF-8, [...]

# 11° UTF-8 é o encoding mais utilizado no mundo na web, segundo o Google » Revolução Etc Thursday 8 May 2008 às 08:8 AM GMT

[...] O Unicode não é um encoding como o UTF-8. Unicode é uma família de encodings, como eu já escrevi anteriormente. O que o gráfico mostrado pelo Mark Davis no Oficial Google Blog mostra é o crescimento do [...]

# 12° asennadas » UTF-8 domina a web Friday 9 May 2008 às 11:9 PM GMT

[...] Nova atopada en Br-Linux apuntando cara esta fonte que tamén fornece un excelente artigo titulado Charsets e encodings. [...]

# 13° Tutorial Avançado de HTML: Declarações « Codando Monday 7 July 2008 às 10:7 PM GMT

[...] Você pode ler mais sobre conjuntos de caracteres em outros lugares pela web. [...]

# 14° Leon Santiago Tuesday 6 January 2009 às 10:6 AM GMT

Olá, Henrique.
Ótimo artigo.

Uma dúvida. Não existe contra-indicação nenhuma em se utilizar UTF-8, então? Porque fiquei com a impressão que simplemente devemos abandonar os outros charsets. Ao mesmo tempo, senti falta de uma indicação mais enfática no texto, nesse sentido, então fiquei em dúvida.

# 15° bruno rios Wednesday 17 June 2009 às 10:17 AM GMT

Uma dúvida… Para usar ISO-8859-1, devo converter todos os caracteres do meu código fonte para as entities correspondentes?

Pois eu faço meus sites “na mao” e sempre digito todos os caracteres normalmente, acentos, cedilhas, aspas… e tudo parece perfeito aqui…

# 16° Charsets e encodings » Revolução Etc Friday 28 August 2009 às 03:28 AM GMT

[...] Excerpt from: Charsets e encodings » Revolução Etc [...]

Avisos
Os itens com asterisco ( * ) são campos de preenchimento obrigatório.
Todos os links inseridos nos comentários possuem o atributo rel="nofollow" para impedir com que user agents (como os mecanismos de busca) sigam os links inseridos para desestimular spammers.
Todos devem se identificar através de e-mail válido.
Os e-mails dos usuários não serão divulgados no site.
Comentários:


Assine por feed

assinantes Assine o feed do Revolução Etc

Sobre o Revolução Etc

Foto do autor Henrique Costa Pereira O Revolução Etc é o site pessoal do Henrique C. Pereira que trabalha com design de interfaces, planejamento, arquitetura da informação e desenvolvimento para web. Ele escreve aqui sobre várias coisas relacionadas com acessibilidade, web standards, tecnologia, desenvolvimento e o que mais der na telha, além de eventualmente escrever alguma coisa ou outra para o Webinsider. Leia mais.

Livros que vão colocar minhocas na sua cabeça:

  • SEO Otimização de Sites - Paulo Teixeira
  • Não me faça pensar! - Steve Krug
  • Google Adwords a Arte da Guerra - Ricardo Vaz Monteiro
  • Design para Internet: Projetando a Experiência Perfeita - Felipe Memoria
  • Sopro no Corpo: Vive-se de Sonhos - Marco Antônio de Queiroz (MAQ)
  • 250 Segredos para Web Designers - MOLLY E. HOLZSCHLAG
  • O design do dia a dia - DONALD A. NORMAN
  • Ser e o Nada - Jean-Paul Sartre
  • Apocalípticos e Integrados - Umberto Eco
  • Ergodesign e Arquitetura de Informação - LUIZ AGNER
  • The Art and Science of Web Design - Jeffrey Veen
  • Ansiedade de Informação 2 - RICHARD SAUL WURMAN
  • Criando Páginas Web com CSS - ANDY BUDD, CAMERON MOLL, SIMON COLLISON
  • Mobile Web Design - Cameron Moll
  • Sigam-me no Twitter

Me encontre

Lugares onde digitalmente eu costumo estar presente.

Anúncios

Blogroll:

Alguns sites interessantes e blogs de amigos que eu leio com frequência. Em ordem alfabética.

Pessoas que trabalham comigo:

Sites dos colegas de trabalho na Webroom.

Já trabalharam comigo:

Som que faz a minha cabeça!

Procurando inspiração? Esta é uma breve lista do que eu ouço!

  • Diana Krall - The Very Best Of
  • U2 - How to dismantle an atomic bom
  • U2 - 18 singles
  • The Essential - Bob Dylan
  • Bob Dylan - Modern Times
  • Miles Davis - Cool & Collected
  • Miles Davis - Prestige Profiles Vol 1
  • Pink Floyd - The Division Bell
  • Pink Floyd - The wall
  • Pink Floyd - Delicate Sound Of Thunder
  • John Coltrane - The Best of John Coltrane
  • The beatles - The Beatles 1