Компьютеры вообще ничего сами не понимают, никогда.
У некоторых типов файлов кодировка определяется их форматом, потому программы, которые с ними работают, всегда используют нужную кодировку.
У других типов файлов кодировка указывается в заголовке. Например, в HTML для этого есть тег. Так что программы читают его содержимое и интерпретируют кодировку верно.
Таблицы кодировок никуда не "зашиты". Они могут быть частью операционной системы, могут - частью того или иного софта.
Когда происходит ввод с клавиатуры, ASCII тут не при чем. Операционная система получает скан-код клавиши, а дальше генерирует символ в соответствии с тем, какая раскладка клавиатуры включена в данный момент. При этом, в какой код одного и того же символа это превращается, также зависит от конкретной программы. Например, если в этот момент открыта командная строка, а в ней установлена кодовая страница 866, символ кириллицы превратится в два байта из таблицы символов 866. А если открыт Word, то превратится в символ Unicode из более чем двух байт.