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.