Я выполняю команду 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?
Как кодируется ваш код исходного кода Java? UTF8? Windows Ansi/CP1252? – FrankPl
Закодировано как UTF-8 – Heitor
Согласно http://stackoverflow.com/questions/1259084/what-encoding-code-page-is-cmd-exe-using, вы можете использовать 'chcp', чтобы показать кодовую страницу, что консоль окно, и это не что-то вроде 1252, но 850 (старая кодовая страница DOS) на моем компьютере. Возможно, вы должны использовать это в своем 'InputStreamReader'. – FrankPl