По первому вопросу: клавиатуры отправляют сканкоды, а не ASCII или Unicode .
Программное обеспечение на компьютере затем интерпретирует коды сканирования, например, BIOS во время загрузки или операционную систему. Например, в Linux коды сканирования и состояние сдвига интерпретируются картами ключей ядра, которые преобразуют коды ключей в 16-битные числа, которые обычно являются символами Unicode / ASCII.