Mac Terminal Não exibe Unicode UTF-8 corretamente quando é ssh'ed no Linux e executa o Emacs

1

Estou conectado a um Mac, executando o Terminal, ssh'ed em um sistema Linux e executando make em uma janela do emacs. Meu log de erros é assim:

_raw.cpp:139: error: invalid conversion from âconst char*â to âsize_tâ
_raw.cpp:139: error:   initializing argument 2 of âint snprintf(char*, size_t, const char*, ...)â
_raw.cpp:139: error: invalid conversion from âintâ to âconst char*â
_raw.cpp:139: error:   initializing argument 3 of âint snprintf(char*, size_t, const char*, ...)â

Observe que, aparentemente, o GCC está tentando usar os caracteres unicode smartquote, mas eles estão sendo enviados como UTF-8 e o Emacs está interceptando-os. Eu acho que o problema aqui é que o EMACS precisa passar o UTF-8 gerado pelo subprocesso até o Terminal. Alguma ideia de como fazer isso acontecer?

    
por vy32 06.04.2011 / 15:08

1 resposta

5

O host remoto não sabe que seu terminal está usando o UTF-8.

Por padrão, o Terminal codifica o texto como UTF-8 e, por padrão, o Terminal comunica isso ao shell do terminal por meio da variável de ambiente LANG (desde que você não tenha alterado essas configurações de preferência).

Você pode ver a codificação (e idioma) sendo usada com o comando locale . Por exemplo, isso é o que diz no meu Mac:

$ locale
LANG="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL=

Se você executá-lo localmente e no host remoto, verá que o host remoto não inclui "utf-8" nos valores de localidade.

No entanto, antes do Mac OS X Lion 10.7, por padrão, o ssh não comunica a variável de ambiente LANG ao host remoto. Você pode organizar isso, mas é necessário configurar o cliente ssh no seu Mac para enviar a variável LANG e o daemon sshd no host remoto para lê-lo.

Consulte as páginas man ssh_config e sshd_config no Mac e no host remoto para obter detalhes. Você provavelmente adicionará uma linha como SendEnv LANG LC_* ao arquivo /etc/ssh/ssh_config no seu Mac e AcceptEnv LANG LC_* in /etc/ssh/sshd_config no host remoto (os detalhes podem variar no host remoto).

Como alternativa, você pode simplesmente export LANG="en_US.UTF-8" depois de efetuar login no shell remoto (a sintaxe exata depende do shell remoto que você está usando). Certifique-se de usar o idioma correto se não for o inglês dos EUA ("en_US"). Você também pode automatizar isso definindo LANG dentro de um script de inicialização do shell como ~/.bash_profile no host remoto.

    
por 05.01.2012 / 08:50