Ваша установка для LANG
должен соответствовать терминалу. Более точно, Ваша установка для LC_CTYPE
(кодировка символов), должен соответствовать кодированию терминала, другие настройки локали не должны соответствовать. И кодирование терминала обычно указывается опцией эмулятора терминала а не переменной локали. LC_CTYPE
объединения два признака: это говорит приложения, какое кодирование использовать на терминале (оба для ввода и вывода), и это говорит приложениям что кодирование использовать с файлами. В случаях 2 и 3, Вы сказали ls
для отображения вывода в кодировании, это отличается от терминала, таким образом, вывод искажен.
Если Вы работаете и с UTF-8 и с латинской 1 кодировкой в разное время, настраиваете свой терминал для использования UTF-8. Это должно заставить это устанавливать LC_CTYPE
к значению, указывающему на UTF-8; не переопределяйте эту установку. (Если эмулятор терминала не устанавливает LC_CTYPE
, действительно переопределите его в своем файле запуска оболочки или для Вашей целой сессии.) Для работы с латинскими 1 данными в терминале UTF-8 использовать luit
(включенный в X служебных комплектов).
LC_CTYPE=en_US.iso88591 luit
(Можно использовать любую другую локаль с тем же кодированием, например. LC_CTYPE=es_ES.iso88591 luit
.)
Многие люди запутываются, потому что они рассматривают компьютер как единственный объект, когда в действительности компьютер является несколькими системами, сотрудничающими для предоставления иллюзии, что это - один связный объект.
BIOS является одним из этих таких подсистем. BIOS точно, что описывает его имя. Основная Входная и выходная Система. Его задание состоит в том, чтобы предоставить основную функциональность системе так, чтобы она могла обнаружить периферийные устройства (такие как: жесткие диски, клавиатуры, мониторы, и т.д.). Другая главная функция, которую обеспечивает BIOS, находится в начальной загрузке Операционная система из обозначенного носителя (CD, DVD, USB, жесткий диск, и т.д.).
Функциональность для обеспечения доступа к этим периферийным устройствам обеспечивает API, который могут использовать ОС и программное обеспечение, если они так выбирают, но операционные системы и программное обеспечение не должны использовать эти API, и часто времена не делают по ряду причин.
Основная причина состоит в том, что производитель устройств знает лучше всего, и будет часто времена обеспечивать низкоуровневый драйвер сами, который может иметь дело с аппаратными средствами более близким способом, чем BIOS общего назначения может.
Вашим вопросом является точно этот сценарий. BIOS может обнаружить клавиатуру и соглашение с нею с помощью его собственного программного обеспечения/драйверов, тогда как ОС не может.
Нет действительно ничего больше к этому, чем это.
Если Вы хотели бы более конкретный пример затем, Вы не должны выглядеть дальнейшими, чем средство прерывания 21, которое было популяризировано MS-DOS. MS-DOS предоставил свои собственные экранные услуги, которые находились вдоль стороны BIOS, потому что Microsoft хотела иметь или более богатые функции или другой API в целом.
Посмотрите страницу Википедии: MS-DOS API.
Современные BIOS берут, любой обнаружил клавиатуру USB, и сделайте некоторый обман SMM, чтобы заставить ее быть похожей на исходную IBM В или клавиатуру PS/2 к BIOS и любым программам, которые используют BIOS для клавиатуры ввод-вывод, который был бы MS-DOS, Memtest86 + и некоторые загрузчики.
Этот старый интерфейс поставляет скэн-коды ПК, когда клавиша нажата и выпущена. Скэн-коды зависят от положения ключа и не знают о том, какое положение стандартное расположение букв на клавиатуре/Дворак включает Вашу клавиатуру. Они приводят в порядок не строку с любым ASCII или точками Unicode.
Статья Wikipedia о scancodes может предоставить некоторое понимание.
Большинство, если не все BIOS должны понять эти scancodes, ли от реального В или клавиатуры PS/2 или PS/2-emulated клавиатура USB. Дополнительные ключи, переключатели, и т.д. имели бы дополнительный или нестандартный scancodes, и BIOS проигнорирует их.
Когда Вы зарегистрированы в свою ОС, драйвер имеет возможность взять на себя управление. Я не уверен точно, как этот интерфейс работал бы или какие драйверы включены (возможно, переключатель является нестандартным scancode, что драйвер берет и вызывает изменение в контурной карте или чем-то... Если это - клавиатура USB, которая это, вероятно, возможно, что переключатель стандартного расположения букв на клавиатуре/Дворака является другим устройством ввода данных HID или чем-то еще также.)