2013-11-28 3 views
1

Я выполняю команду Windows и должен анализировать выходные результаты и сравнивать часть текста со строкой, ранее сохраненной в Java-коде.Преобразование вывода командной строки Windows из Cp1252 в сопоставимую строку

Но, по-видимому, несоответствие символов не позволяет равным возвращать true.

Thats мой код:

ProcessBuilder pb = new ProcessBuilder(); 
    pb.command("systeminfo"); 
    Process shell = pb.start(); 
    InputStream shellIn = shell.getInputStream(); 


    InputStreamReader reader = new InputStreamReader(shellIn, "Cp1252"); 
    BufferedReader br = new BufferedReader(reader); 

    String sCurrentLine; 
    while((sCurrentLine = br.readLine()) != null) { 

     // ... omitting parse of sCurrentLine for brevity 
     System.out.println("DOS String:" + sCurrentLine); 
     System.out.println("JAVA String: "+ Versão"); 
     System.out.println("Versão".equals(sCurrentLine)); 
    } 

И мой вывод будет: (Commandline окно):

Windows String: Versão 
    JAVA String: VersÒo 
    false 

Для текстового файла:

Windows String: VersÒo 
    JAVA String: Versão 
    false 

Я нашел пара подобных вопросов здесь, в stackoverflow, но ни один из разработчиков не работал для меня.

converting String from Windows charset to UTF 8 in Java

Converting from Windows 1252 to UTF8 in Java: null characters with CharsetDecoder/Encoder

How to parse a string that is in a different encoding from java

Setting the default Java character encoding?

How to Find the Default Charset/Encoding in Java?

+0

Как кодируется ваш код исходного кода Java? UTF8? Windows Ansi/CP1252? – FrankPl

+0

Закодировано как UTF-8 – Heitor

+0

Согласно http://stackoverflow.com/questions/1259084/what-encoding-code-page-is-cmd-exe-using, вы можете использовать 'chcp', чтобы показать кодовую страницу, что консоль окно, и это не что-то вроде 1252, но 850 (старая кодовая страница DOS) на моем компьютере. Возможно, вы должны использовать это в своем 'InputStreamReader'. – FrankPl

ответ

1

Командная строка в большинстве случаев не использует стандартную кодовую страницу для Windows, но старый DOS один. Согласно What encoding/code page is cmd.exe using?, вы можете узнать, используя команду chcp в командной строке, чтобы узнать, что она использует в вашей среде. На моем компьютере эта команда показывает 850. Таким образом, я бы предположил, что это кодовая страница, которая используется, и, следовательно, вы должны использовать ее в своем обращении к new InputStreamReader.

Я не уверен, однако, если это относится ко всем версиям Windows во всех локалях. На самом деле, я никогда не использовал японскую, арабскую, китайскую или корейскую Windows.

+0

решена. благодаря ! – Heitor

Смежные вопросы