Apaxe Posted March 11, 2014 Report Share Posted March 11, 2014 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 More sharing options...
HappyHippyHippo Posted March 11, 2014 Report Share Posted March 11, 2014 hum ... o enconding convencional da consola do windows é CP-1252, no entanto podes experimentar se o UTF-8 come isso ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Apaxe Posted March 11, 2014 Author Report Share Posted March 11, 2014 hum ... o enconding convencional da consola do windows é CP-1252, no entanto podes experimentar se o UTF-8 come isso ... HappyHippyHippo, obrigado pela resposta. O UTF-8, também já tinha experimentado e também não consegue resolver... :-( Link to comment Share on other sites More sharing options...
Ernest Posted March 12, 2014 Report Share Posted March 12, 2014 (edited) 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 March 12, 2014 by Ernest Duarte 1 Report Link to comment Share on other sites More sharing options...
Apaxe Posted March 12, 2014 Author Report Share Posted March 12, 2014 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now