Как правильно прочитать русский символ через System.in.read()?
Насколько мне известно русские символы кодируются 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)