Erro ao ler cedilha de arquivo CSV

4 respostas
I

Galera, utilizei a classe Robot do java para digitar alguns dados que foram digitados em uma planilha no Excel e salvo no format CSV, texto separado por vírgulas. Até aí tudo funfa mto bem, só que não consigo reproduzir o cedilha. Tentei de todas as formas reproduzir até que consegui que o robo digite ALT + 128 para cedilha minúsculo, e ALT + 135 para cedilha minúsculo, só que aí descobri que o problema está na leitura, ele le a linha do arquivo texto mas na hora de fazer a comparação não dá certo, nunca acerta que é cedilha.
Tentei usar o Java 7 que faz switch - case com string mas não resolveu, ele lê o caracter e imprime outra coisa, já tentei pegar o Hashcode, o valor int do char, tudo o que me passou pela cabeça, mas até agora nada deu certo, seguem trechos do código abaixo e se alguém tiver uma idéia.

public void tecla(Character caracter){
 
        String texto = String.valueOf(caracter);
        
        System.out.println("Texto: " + texto);
        System.out.println("caracter:  " + (int)caracter);
        System.out.println("caracter to string:  " + caracter.toString());
        System.out.println("HashCode: " + caracter.hashCode());
        
        
        switch(texto){
             
            case "Ç":
                robo.keyPress(KeyEvent.VK_ALT);
                robo.delay(1000);
                robo.keyPress(KeyEvent.VK_NUMPAD1);
                robo.keyRelease(KeyEvent.VK_NUMPAD1);
                robo.delay(1000);
                robo.keyPress(KeyEvent.VK_NUMPAD2);
                robo.keyRelease(KeyEvent.VK_NUMPAD2);
                robo.delay(1000);
                robo.keyPress(KeyEvent.VK_NUMPAD8);
                robo.keyRelease(KeyEvent.VK_NUMPAD8);
                robo.delay(1000);
                robo.keyRelease(KeyEvent.VK_ALT);
                break;
                
            
            case "ç":
                robo.keyPress(KeyEvent.VK_ALT);
                robo.delay(1000);
                robo.keyPress(KeyEvent.VK_NUMPAD1);
                robo.keyRelease(KeyEvent.VK_NUMPAD1);
                robo.delay(1000);
                robo.keyPress(KeyEvent.VK_NUMPAD3);
                robo.keyRelease(KeyEvent.VK_NUMPAD3);
                robo.delay(1000);
                robo.keyPress(KeyEvent.VK_NUMPAD5);
                robo.keyRelease(KeyEvent.VK_NUMPAD5);
                robo.delay(1000);
                robo.keyRelease(KeyEvent.VK_ALT);
                break;
............continua lendo outros caracteres.

Mas ele dá as seguintes saídas para um cedilha minúsculo um cedilha maiúsculo:

Texto: �
caracter: 65533
caracter to string: �
HashCode: 65533
Texto: �
caracter: 65533
caracter to string: �
HashCode: 65533

Mesmo hashcode e código char, alguém pode me ajudar?

Abraços e desde já agradeço.

4 Respostas

E

Muda o charset encoding da leitura/gravação.

I

Não é web, ele apenas faz a leitura em um arquivo texto, como faço para alterar esse encoding?

Abçs

E

não sei o que você está usando para ler o arquivo, mas segue um exemplo.

Reader reader = new InputStreamReader(new FileInputStream(arquivo), "UTF-8"); BufferedReader bf = new BufferedReader(reader);

I

Amigo, funcionou mto bem.

Valeu mesmo, eu não conhecia a classe Charset, aprendi mais uma, obrigado pela ajuda.

Abraços

Criado 22 de novembro de 2011
Ultima resposta 23 de nov. de 2011
Respostas 4
Participantes 2