Jump to content

Codificação de carateres e Retorno de Comandos


Apaxe
 Share

Recommended Posts

Olá a todos!

Não consigo resolver o problema da codificação dos carateres acentuados e com cedilha que retornam da execução de comandos do Windows!!

Segue um exemplo de uma Classe que fiz para capturar o retorno de um comando do Windows:


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Exemplo_2 {

   public static void main(String[] args) throws IOException {

       String comando = "cmd /C vol";
       try {
           Process exec = Runtime.getRuntime().exec(comando);
           String linha;
           BufferedReader buf = new BufferedReader(new InputStreamReader(exec.getInputStream(), "ISO-8859-1"));
           while ((linha = buf.readLine()) != null) {
               System.out.println(linha);
           }
       } catch (Exception ex) {
           System.err.println("Erro: " + ex.getMessage());
       }
   }

}

Alguém consegue ajudar-me resolver o problema da codificação de carateres?

Obrigados

Link to comment
Share on other sites

Bom dia,

Introdução e alguns truques.

Na verdade executar aplicação externa a partir do sistema Java não é simples.

Sem entrar em detalhes :

Runtime.exec () não é um shell...

Para evitar impasses, os diferentes fluxos (InputStream , ErrorStream) deve ser tratado a partir de diferentes Threads.

Desde Java 5, temos à nossa disposição a classe ProcessBuilder que permite entre outros, fundir o fluxo de saída e processo de erro.

Desde Java 6, a classe Desktop foi integrado no API padrão que permite abrir um arquivo em particular com a aplicação associada a ele pelo sistema.

Resposta ao problema da codificação dos carateres no Windows :

A codificação é um problema do Windows usando duas codificações diferentes, dependendo do tipo de aplicação. De acordo com o sistema europeu é, em geral o windows-1252 ( iso-latin1 alterado) e CP850 (usado por aplicativos de console).

O problema é que a codificação padrão é windows-1252, e aplicativos de console usa o CP850.

De repente, os dados não são lidos com a codificação adequada e encontramos algumas coisas estranhas sobre acentos, etc...

Temos, pois, fazer uso desta codificação para ler o fluxo do processo

Depende do sistema, o melhor é testar com CP850 et depois com CP1252.

No meu caso ele funciona com CP1252 :

BufferedReader buf = new BufferedReader(new InputStreamReader(exec.getInputStream(), "CP1252"));

Cordialmente

Edited by Ernest Duarte
  • Vote 1
Link to comment
Share on other sites

Ernest Duarte, muito obrigado pela introdução que fez pois foi muito esclarecedora.

Então, o truque para resolver o meu caso foi utilizar a codificação "CP850". A codificação "CP1252" no meu caso não funciona.

Mais uma vez, muito obrigado.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.