L'hôte distant ne sait pas que votre terminal utilise l'UTF-8.
Par défaut, Terminal code le texte en UTF-8, et par défaut Terminal communique cela à l'interpréteur de commandes du terminal via la variable d'environnement LANG
(tant que vous n'avez pas modifié ces préférences).
Vous pouvez voir l'encodage (et la langue) utilisé avec la commande locale
. Par exemple, voici ce qui est affiché sur mon 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=
Si vous l'exécutez localement et sur l'hôte distant, vous devriez voir que l'hôte distant n'inclut pas "utf-8" dans les valeurs de locale.
Cependant, avant Mac OS X Lion 10.7, par défaut ssh ne communique pas la variable d'environnement LANG
à l'hôte distant. Vous pouvez organiser cela, mais cela nécessite la configuration à la fois du client ssh sur votre Mac pour envoyer la variable LANG
et du démon sshd sur l'hôte distant pour la lire.
Consultez les pages de manuel ssh_config et sshd_config sur le Mac et l'hôte distant pour plus de détails. Vous ajouterez probablement une ligne comme SendEnv LANG LC_*
dans le fichier /etc/ssh/ssh_config
sur votre Mac et AcceptEnv LANG LC_*
dans /etc/ssh/sshd_config
sur l'hôte distant (les détails peuvent varier sur l'hôte distant).
Alternativement, vous pouvez simplement export LANG="en_US.UTF-8"
une fois connecté à l'interpréteur de commandes distant (la syntaxe exacte dépend de l'interpréteur de commandes distant que vous utilisez). Assurez-vous d'utiliser la langue correcte si ce n'est pas l'anglais américain ("en_US"). Vous pouvez également automatiser cela en définissant LANG
dans un script de démarrage de shell comme ~/.bash_profile
sur l'hôte distant.