Unicode
Publicado há 766 dias atrás
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:
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

