Registrar    Login   Sobre o InfoBlogs  

Unicode    


Uma das primeiras ações que tomei ao iniciar minhas atividades no INEP foi definir o  Charset padrão para UTF-8. Para garantir que todos os fontes (java e html) estejam utilizando o charset definido, alterei o pre-commit hook do Subversion para que faça uma checagem da codificação dos arquivos antes de efetivar o commit.


Obviamente fui questionado por N desenvolvedores, qual a real intenção por traz daquele ato. Já trabalhei em alguns lugares onde alguns desenvolvedores utilizavam Windows e outros Linux no seus Desktops. Cada um destes SOs usam um charset padrão diferente para salvar seus arquivos (ISO-8859-1 e UTF-8 respectivamente). Portanto era comum termos algumas mensagens de exceptions sendo mostradas com alguns erros nas acentuações e caracteres especiais.


Mesmo no INEP em conversa com o Demetrio, um excelente Web-Designer, tivemos algumas várias horas de conversa sobre qual a função do charset e da utilidade da tag Content-Type do html. Com o intuito de desmistificar este assunto, fica aqui a a referência a um excelente artigo do Joel On Software, escrito em outubro de 2003, onde ele mesmo diz: "Se você é um programador trabalhando em 2003 e não sabe o básico de character encoding e Unicode, vou pega-lo, e puni-lo, fazendo-o picar cebolas por 6 meses em um submarino". E ainda mais: "Acreditar que "plain text = ascii = caracteres são 8 bits não só é errado como se continua programando desta maneira, você não é muito melhor do que um médico que não acredita em germes. Por favor, não escreva outra linha de código sem ler este artigo"


 

The Single Most Important Fact About Encodings - It does not make sense to have a string without knowing what encoding it uses.


"Se você possui uma string, em memória, em arquivo, ou em um e-mail, você precisa saber qual o encoding está ou você não será capaz de interpretar ou mostrar tal string corretamente."


 Isto permite que sites sejam perfeitamente visualizados em Japonês, em Árabe ou até mesmo em Russo.


Faça um teste! Cada um destes sites estão usando um Content-Type difente. Você pode se informar sobre qual o Charset utilizado clicando CTRL+I no Firefox. Experimente mudar a forma como o browser interpreta os caracteres mudando a codificação no menu Exibir->Codificação do Firefox.


Percebam que isto não tem nada haver com o Locale (Content-Language) que é o idioma da página.


Por quê então foi escolhido o UTF-8 como charset padrão do INEP e não o ISO-8859-1? Existem várias discussões na Internet sobre isto, mas a principal é que o UTF-8 é um formato universal e creio que abra em todos os sistemas e dispositivos de forma correta e sem bugs. Outro fato é que a própria w3c cita: "A Unicode encoding such as UTF-8 is a good choice for a number of reasons." e também cita em outra página (em português): "Os exemplos acima mostram declarações para codificação de conteúdos em UTF-8. Esta parece ser a melhor escolha para a maioria dos propósitos dos documentos, contudo não é a única possibilidade."


Voltando ao assunto do pre-commit hook, se tiver interesse em implementa-lo em seus repositórios do Subversion, dê uma olhada aqui: http://svnbook.red-bean.com/nightly/en/svn.reposadmin.create.html


Para verificar se o arquivo é UTF-8, basta alterar este script que já vem no Subversion para verificar outras extensões e não apenas arquivos *.po


Em códigos fontes já existentes, o Claúdio Miranda postou em seu blog, duas excelentes alternativas para conversão:



  1. Conversão de charset para UTF-8

  2. Conversão de charset para UTF-8, modo gráfico



 Boa leitura!




 leia mais...





Ainda neste blog:

Facelets - Exemplos Simples


Facelets - Introdução


Empresas Brasileiras de TI! Abram os olhos (se ainda não o fizeram) !


Aumentando a produtividade com JSF e Jboss Seam - XSeam lançado!


Facelets - Composição e Ferramentas


Como reconhecer bons programadores


Dicas para Iniciantes Java em Projetos Coorporativos


A importância do ASA (App. Server Admin)


Tutorial: Como assassinar o SimpleDateFormat


Exadel Studio Pro + JbossIDE = Red Hat Developer Studio


Facelets - Composição e Ferramentas


Tutorial: Como assassinar o SimpleDateFormat


Garota de sete anos de idade implementa Pet Store de Java


Consultar SAP certificado


Gambi Design Patterns


Queimando tudo até a última ponta


Matando um alien devorador de memória


Novo vídeo Java Everywhere


Que artigo show de bola!!!


Uma breve introdução ao Drools


Java hoje e principalmente amanhâ...


DSL com Drools


Você sabe o que é DDD? Workshop DDD em Brasília


I am also a Nerd God ;)


seamframework.org é lançado!


Feliz Natal


A Song by programmers, for programmers


JON - Jboss Operation Network


Síntese de idéias e discussão sobre IDE


XSeam - Componente de UF e Município


Ainda Estou Vivo!


Projeto Hotmotors da Aspercom agora com JBoss Seam


Workshop Scrum em Brasília


Facelets tem bugs chatos corrigidos no novo Beta


Alterações no Jroller


Trabalhando com o Drools


Screencast XSeam


Treinamento Java EE em Porto Alegre


Falando em Java! Eu fui!


Sun Microsystems e IBM firmam parceria em mercado de servidores para enfrentar HP


Usando Struts ???


Novo Blog da família: Frederico Benevides Realm


XSeam - i18n e Facelets Bug


Vem ai Just Java 2008 - Está aberta a submissão de palestras


Novo vídeo Java Everywhere


E da-lhe Java!!!! Java vs C por Vítor Pamplona


Singleton Considerado Estupido


First Jboss Seam Application goes live!


Paulo Coelho é Agile ?


Porque hoje é sabado





Categoria: Java Blog: Benevides' Blog/Java Visualização: Abrir com frame