когда в консоли, если я нажимаю клавишу, какой-то контроллер прерываний отправляет код этой клавиши в CPU, который просматривает какую-то таблицу и представляет это нажатие клавиши, печатая символ в stdout. Но посылает ли клавиатура код ASCII этой клавиши или просто какой-то стандартизированный код? Так как языков так много и лишних символов, ОС должна и далее переводить свой код в какой-то символ в соответствии с выбранной пользователем схемой. Я спрашиваю, потому что я из Чехии, и мы используем некоторые символы, которых нет в стандартном коде ASCII. Поэтому я подумал, что если я введу этот символ в консоль, а затем напечатаю его, скажем, в C++, используя cin и cout, и я установил locale на чешский язык, stdin на самом деле должен отправить не-ASCII-код символа, который я нажал для ввода потока. Я прав?
1 ответ
2
По первому вопросу: клавиатуры отправляют сканкоды, а не ASCII или Unicode.
Программное обеспечение на компьютере затем интерпретирует коды сканирования, например, BIOS во время загрузки или операционную систему. Например, в Linux коды сканирования и состояние сдвига интерпретируются картами ключей ядра, которые переводят коды ключей в 16-битные числа, которые обычно являются символами Unicode/ASCII.