Как правильно прочитать русский символ через System.in.read()?

Рейтинг: 2Ответов: 0Опубликовано: 14.03.2023

Насколько мне известно русские символы кодируются 2 байтами, английские - одним. Метод System.in.read() читает один байт из потока. Пример:

public static void main(String args[]) throws IOException{
    char symbol = (char) System.in.read(); //Вводим с клавиатуры русскую букву п
    System.out.print(symbol); //Вывод на экран Ð
}

Получается кракозябра. На экран вывелся лишь 1 байт нашей буквы, второй байт потерялся. Сделаем по-другому - добавим бесконечный цикл while, чтобы метод read() читал и выводил с потока байты до тех пор, пока они не кончатся.

public static void main(String args[]) throws IOException {
    while(true){
        char symbol = (char) System.in.read(); //Вводим также русскую букву п
        System.out.print(symbol); //Выводим байты. Вывод п
    }
}

Опять получились кракозябры. Однако если вводить числа или буквы, которые кодируются одним байтом преобразование в char происходит корректно и на экран выводится ожидаемый результат.

Вопрос - как правильно сложить два (и более) байт, чтобы получить ожидаемый результат в виде вывода на экран нужного нам символа?

UPD. Запускаю в онлайн компиляторе JDK 17.0.1 на Windows 10)

Ответы

Ответов пока нет.