Codificação de entrada do teclado

1

Eu estou tentando aprender o básico sobre Unicode e UTF-8, e está indo muito bem até agora. Eu sei que é possível escolher a codificação do arquivo ao abri-lo.

Minha pergunta é:

quando eu digito texto usando o teclado em um editor de texto (Gedit, Vim) ou um prompt de comando, qual é a codificação enviada pelo teclado para o aplicativo? é diferente em máquinas Windows? pode ser configurado?

Obrigado antecipadamente.

    
por obo 11.04.2017 / 20:06

2 respostas

2

Veja Como funcionam as entradas de teclado e texto? para uma visão geral do tópico. Depende se o aplicativo está sendo executado em um terminal ou se está falando diretamente com o ambiente da GUI.

Em um terminal, o software do terminal (geralmente um emulador de terminal neste século) determina a codificação de caracteres. Ele transmite a codificação de caracteres (o mesmo para entrada e saída), definindo a variável de ambiente localidade LC_CTYPE . Se esta variável não estiver configurada ou configurada como C , o terminal não está fornecendo nenhuma informação, portanto, o aplicativo não pode saber qual é a codificação. Em um terminal, os caracteres são enviados para o aplicativo como caracteres; entrada sem caracteres (teclas de função, teclas de cursor, teclas com modificadores como Alt , etc.) é enviada como seqüências de escape (algumas delas como caracteres de controle ).

Os aplicativos X11 recebem informações na forma de KeyPress enventa . Os eventos KeyPresss contêm uma indicação de baixo nível ( keycode , que corresponde aproximadamente à localização física da chave, e state , que codifica os modificadores ativos). O aplicativo pode chamar uma função como XLookupString (função tradicional, limitada ao Latin-1 ) ou XmbLookupString (função de suporte a outras codificações unibyte) ou XwcLookupString (função que suporta codificações multibyte) ou < href="https://www.x.org/releases/X11R7.5/doc/man/man3/XmbLookupString.3.html"> Xutf8LookupString (função UTF-8 moderna) para converter este informações brutas para uma cadeia de caracteres.

O mapeamento de chaves para caracteres pode ser alterado em vários níveis; Como funcionam as entradas de teclado e texto? uma visão geral.

    
por 13.04.2017 / 02:19
3

O teclado não envia caracteres; ele envia códigos de varredura. Por exemplo, quando você pressiona a tecla "e" em um teclado americano típico, ele envia um código de verificação que basicamente diz "3a tecla da esquerda na 2ª linha de teclas alfanuméricas no grupo principal". Este código de verificação é convertido em um caractere (ou, em geral, em um símbolo de chave, pense em chaves como "Print Screen") pelo kernel (ou algum outro componente do sistema operacional) e, especificamente no Linux, possivelmente pelo gráfico subsistema.

Geralmente, o sistema operacional ou o subsistema gráfico fornece um ou mais utilitários que controlam as tabelas de conversão; por exemplo, tanto no Windows quanto no Linux, você pode instalar quantos layouts de teclado quiser e alternar entre eles com facilidade.

O que o aplicativo obtém depende das convenções do sistema operacional. No Windows, os aplicativos de console obtêm um caractere codificado de acordo com a página de códigos do console atual configurada pelo comando chcp ; aplicações gráficas recebem um símbolo de chave que normalmente é traduzido em um caractere codificado em UTF-16. No Linux, os aplicativos geralmente recebem um caractere codificado em UTF-8. Por exemplo, se eu pressionar a tecla rotulada ă (LATIN PEQUENA LETRA A COM BREVE, U + 0103) com o layout do teclado definido corretamente,

  • Um aplicativo de console no Windows com chcp 1250 receberá um byte '\xE3' (227 decimal).
  • Um aplicativo de console no Windows com chcp 852 receberá um byte '\xC7' (199 decimal).
  • Um aplicativo gráfico no Windows obterá um símbolo de chave adequado, que normalmente será armazenado / processado como dois bytes '\x03' '\x01' (ou como o inteiro curto 0x103 ).
  • Um aplicativo de terminal no Linux obterá dois bytes '\xC4' '\x83' (< U + 0103 > na codificação UTF-8).
  • Um aplicativo gráfico no Linux obterá um símbolo de chave adequado, que normalmente será armazenado / processado como dois bytes '\xC4' '\x83' (< U + 0103 > na codificação UTF-8).

(Note que no Windows quero dizer Windows NT e seus sucessores como Windows XP, Windows Vista, 7 ou 10. O Windows 95 etc. é uma linha completamente diferente de sistemas operacionais, felizmente não está mais em uso.)

No Vim, você obtém duas novas camadas de tradução:

  • Você pode instalar um mapa de tradução de teclado com set keymap ; veja :help 'keymap' e :help mbyte-keymap . Isso ajuda a inserir texto no idioma desejado em sistemas nos quais você não pode instalar um layout de teclado no nível do sistema operacional.

  • Você pode definir um mapeamento com o comando :map . Veja :help :map .

por 12.04.2017 / 00:27