domingo, 31 de julho de 2011

Problemas com acentuação

Nos últimos dias estive estudando sobre internacionalização (localization) de aplicativos Android.

Estava fazendo uns testes com datas e me deparei com um problema recorrente: acentuação incorreta. No caso, foi com o “Sábado”. A maioria já deve ter tido este problema, e quem trabalha em informática com certeza já perdeu algumas horas com este assunto.
Resolvi dar uma estudada mais detalhada nisto e registrar aqui algumas observações sobre o tema.
Primeiro, é preciso explicar que isso acontece devido ao fato que um dado foi gerado com uma codificação e lido com outra. Em linguagem técnica: gerado com uma página de código (encoding) e mostrado com outra.
Com essa informação, fica fácil encontrar a solução: é só ler os dados com a mesma codificação com que foi gravada!
Fácil de falar, difícil de fazer!
Como saber com que página de código foram gerados os dados?

Pesquisando na internet encontrei uma classe que fornece uma lista das páginas de códigos disponíveis no sistema: Charset.availableCharsets(). Com ela adaptei o programa listado a seguir.  


//  Pgm t7b.java teste páginas de código

import java.nio.charset.Charset;
import java.util.Iterator;
import java.util.Set;
import java.util.SortedMap;
import java.io.*;
import java.util.*;
import java.text.SimpleDateFormat;

  class t7b {
  public static void main (String[] args) throws Exception, UnsupportedEncodingException {
    SortedMap charsets = Charset.availableCharsets();
    Set names = charsets.keySet();
    String sabado = "Sábado";
    Calendar calendario = GregorianCalendar.getInstance();
    Date data;
    SimpleDateFormat formato = new SimpleDateFormat("EEEE");
    int i = 0;
    do {
       data = calendario.getTime();
       int dia = calendario.get(Calendar.DAY_OF_WEEK);
       if (dia == 7) {
          break;
       }
       i++;
       calendario.add(Calendar.DAY_OF_WEEK, 1);
    } while(i<7);
    for (Iterator encName = names.iterator(); encName.hasNext();) {
       String name = (String) encName.next();
       System.out.print(name +"   ");
       if (!(name=="ISO-2022-CN"||name=="x-JISAutoDetect")) {
           String diaSemana = new String(formato.format(data).getBytes(name));
           if (diaSemana.equals(sabado)) {
               System.out.printf(diaSemana+"  Encoding name: "+ name);
           }
       }
       System.out.println(" ");
    }
  }
}


O programa gera uma saída (parcial):

  ...
IBM-Thai   
IBM00858   Sábado  Encoding name: IBM00858
IBM01140   
IBM01141   
IBM420   
IBM424   
IBM437   Sábado  Encoding name: IBM437
IBM500   
IBM857   Sábado  Encoding name: IBM857
IBM860   Sábado  Encoding name: IBM860
IBM861   Sábado  Encoding name: IBM861
IBM862   Sábado  Encoding name: IBM862
IBM863   
IBM864   
IBM865   Sábado  Encoding name: IBM865
IBM866   
ISO-2022-CN   
ISO-2022-JP   
ISO-2022-JP-2   
...
  
  
Obs.:
1. No meu caso, a página de código usada no formato é a “IBM860” e a página que estava imprimindo a “ISO8859-1”.
2. O encoding atua no momento da conversão de bytes para string.

  

sábado, 16 de julho de 2011

Dica para publicar um aplicativo no Android Market

Se você estiver recebendo as mensagens: "Envie um apk válido" ou "Ocorreu um erro inesperado. Tente mais tarde", tente enviar com outro browser.
Eu só consegui com o Chrome.

Como usar o 100Palpite?

1. Na tela inicial do aplicativo, apertar a tecla de Menu do celular.
2. Pressionar "Gerar Palpite"
3. Digitar de 1 a 5
4. Executar
5. Salvar
6. Selecionar "Palpites da Megasena"
7. etc

quinta-feira, 14 de julho de 2011

Publiquei meu primeiro aplicativo no Android Market

     
 100Palpite? - Programa gerador de palpites para a Mega-sena.

Seja muito bem vindo ao “Agorandroid”!

Neste espaço, pretendo discorrer sobre o meu aprendizado de programação e desenvolvimento de aplicativos para a plataforma Android.

Estou estudando desenvolvimento para dispositivos móveis há aproximadamente dois anos. Comecei pelo iPhone e depois de estudar c básico, objective-c e vários manuais do iOs (centenas e centenas de páginas, acreditem!) cheguei num ponto em que não me sentia confortável com o meu nível de evolução no domínio da arquitetura de desenvolvimento. Decidi dar um tempo.
O destino veio me dar uma mão: tive meu MacBook furtado, com todos os meus estudos e programas!
Neste ano (2011), resolvi estudar Java e a plataforma de desenvolvimento para o Android.
Mais centenas de páginas estudadas.

         O Blog começa neste ponto.


Saudações,
A H Gusukuma