@antoart
Web developer

Как правильно при помощи JAVA вывести из консоли CMD.exe русские слова?

Приветствую!

Друзья, есть простая (как я думал) задача.
В консоли 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
  • Вопрос задан
  • 1248 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы