Кодировка ввода с клавиатуры

Подтверждаю. В моем случае с параметром «--port = nnn» ему (nullmailer) необходимо было явно указать параметр «smtp». ( в виде текста в / etc / nullmailer / remotes)

например my.relay smtp --port = 999

Даже если по умолчанию используется smtp.

Sigh.

1
11.01.2020, 15:07
2 ответа

См. Как работают ввод с клавиатуры и вывод текста? для обзора темы. Это зависит от того, работает ли приложение в терминале или напрямую обращается к среде графического интерфейса.

В терминале программное обеспечение терминала (обычно это эмулятор терминала в этом столетии) определяет кодировку символов. Он передает кодировку символов (одинаковую для ввода и вывода) путем установки переменной среды locale LC_CTYPE . Если эта переменная не задана или установлена ​​на C , терминал не предоставляет никакой информации, поэтому приложение не может знать, какая кодировка. В терминале символы отправляются в приложение как символы; несимвольный ввод (функциональные клавиши, клавиши курсора, клавиши с модификаторами, такие как Alt и т. д.) отправляется как escape-последовательности (некоторые из них как управляющие символы вместо этого).

Приложения X11 получают ввод в виде KeyPress envents . События KeyPresss содержат индикацию низкого уровня ( код клавиши , который примерно соответствует физическому расположению клавиши, и состояние , которое кодирует активные модификаторы). Приложение может вызывать такую ​​функцию, как XLookupString (традиционная функция, ограниченная Latin-1) или XmbLookupString (функция, поддерживающая другие юнибайтные кодировки) или XwcLookupString (функция поддержка многобайтовых кодировок) или Xutf8LookupString (современная функция UTF-8) для преобразования этой необработанной информации в символьную строку.

Отображение клавиш и символов может быть изменено на различных уровнях; Как работают ввод с клавиатуры и вывод текста? В есть обзор.

3
27.01.2020, 23:16

Клавиатура не отправляет символы; он отправляет коды сканирования. Например, когда вы нажимаете клавишу с надписью «e» на типичной американской клавиатуре, она отправляет скан-код, который, по сути, говорит: «3-я клавиша слева во 2-м ряду буквенно-цифровых клавиш в основной группе». Этот скан-код преобразуется в символ (или, в общем, в символ ключа, подумайте о таких ключах, как «Print Screen») ядром (или каким-либо другим компонентом операционной системы) и, особенно в Linux, возможно, графическим подсистема.

Обычно операционная система или графическая подсистема предоставляют одну или несколько утилит, которые управляют таблицами преобразования; например, как в Windows, так и в Linux вы можете установить любое количество раскладок клавиатуры и легко переключаться между ними.

То, что получает приложение, зависит от соглашений операционной системы. В Windows консольные приложения получают символы, закодированные в соответствии с текущей кодовой страницей консоли, установленной командой chcp ; графические приложения получают ключевой символ, который обычно переводится в кодированный символ UTF-16. В Linux приложения обычно получают символы в кодировке UTF-8. Например, если я нажму клавишу с меткой ă (СТРОЧНАЯ ЛАТИНСКАЯ БУКВА A С BREVE, U + 0103) с правильной раскладкой клавиатуры,

  • Консольное приложение в Windows с chcp 1250 получит один байт '\ xE3' (227 в десятичной системе).
  • Консольное приложение в Windows с chcp 852 получит один байт '\ xC7' (199 десятичных знаков).
  • Графическое приложение в Windows получит подходящий символ ключа, который обычно сохраняется / обрабатывается как два байта '\ x03' '\ x01' (или как короткое целое число 0x103 ).
  • Терминальное приложение в Linux получит два байта '\ xC4' '\ x83' ( в кодировке UTF-8).
  • Графическое приложение в Linux получит подходящий символ ключа, который обычно сохраняется / обрабатывается как два байта '\ xC4' '\ x83' ( в UTF -8 кодировка).

(Обратите внимание, что под Windows я имею в виду Windows NT и ее преемники, такие как Windows XP, Windows Vista, 7 или 10. Windows 95 и т. Д. Представляют собой совершенно другую линию операционных систем, к счастью, больше не используемые.)

В Vim вы получаете два новых уровня перевода:

  • Вы можете установить карту перевода клавиатуры с набором раскладки клавиатуры ; см. : help 'keymap' и : help mbyte-keymap . Это помогает вводить текст на желаемом языке в системах, где вы не можете установить раскладку клавиатуры на уровне операционной системы.

  • Вы можете определить отображение с помощью команды : map . См. : help: map .

3
27.01.2020, 23:16

Теги

Похожие вопросы