Приветствую!
Друзья, есть простая (как я думал) задача.
В консоли Windows запускается java приложение.
Приложение просит ввести строку, после чего выводит ее же следом.
Все бы ничего, но столкнулся с проблемой.
Когда я пишу слово кириллицей, то оно не прочитывает букву
"Ш" (большая). Вместо нее выводит
"?"
Полистал интернеты, везде, где нашел, пишут заменить кодировку на входном потоке и на выходном. Пробовал и так, и эдак, и кодировку cp866 и cp1251.
Добился того, что кириллица выводится нормально, все, кроме буквы Ш.
Причем, что интересно, заданную строку из программы выводит правильно.
Друзья, прошу помочь!
Или подскажите как исправить, или куда копать.
Вывод программы
E:\work\java\SimpleComandLineApp\out\production\SimpleComandLineApp>java ru.antonov.Main
Привет! Что ты хочешь, чтобы я вывел на экран консоли?
an english word
вывожу на экран (а букву Ш покажу как ?) >an english word
Что-то еще хочеШь написать?
Слово ШКВАРКИ, - сказала шепелявая змея и уползла в шерШавые кусты
вывожу на экран (а букву Ш покажу как ?) >Слово ?КВАРКИ, - сказала шепелявая змея и уползла в шер?авые кусты
Что-то еще хочеШь написать?
ШКВАРКИ
вывожу на экран (а букву Ш покажу как ?) >?КВАРКИ
Что-то еще хочеШь написать?
exit
Пока! ШШШШШ
Ниже код программыpublic class Main {
public static void main(String[] args) throws Exception {
// write your code here
System.out.println("Привет! Что ты хочешь, чтобы я вывел на экран консоли?");
//подмена стандартного вывода другим потоком, который выводит в кодировке Cp866
PrintStream systemOut = System.out;
PrintStream printStream = new PrintStream(System.out, true, "Cp866");
System.setOut(printStream);
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String userText;
String data = reader.readLine();
while (!"exit".equals(data)) {
userText = data;
//вывод в консоль слова в кодировке Cp866
String text = "вывожу на экран (а букву Ш покажу как ?) >";
System.out.print(text);
System.out.write(userText.getBytes());
System.out.println("\nЧто-то еще хочеШь написать? <or exit>");
data = reader.readLine();
}
printStream.close();
reader.close();
System.setOut(systemOut);
System.out.println("Пока! ШШШШШ");
}
}
UPD:
кодировка исходного файла UTF-8