1 votes

Le Terminal Mac n'affiche pas correctement l'Unicode UTF-8 lorsque vous êtes connecté en SSH sur Linux et que vous exécutez Emacs

Je suis connecté à un Mac, en cours d'exécution Terminal, en ssh'ed dans un système Linux et exécutant make dans une fenêtre emacs. Mon journal d'erreurs ressemble à ceci:

_raw.cpp:139: erreur: conversion invalide de âconst char*â en âsize_tâ
_raw.cpp:139: erreur:   initialisation de l'argument 2 de âint snprintf(char*, size_t, const char*, ...)â
_raw.cpp:139: erreur: conversion invalide de âintâ en âconst char*â
_raw.cpp:139: erreur:   initialisation de l'argument 3 de âint snprintf(char*, size_t, const char*, ...)â

Remarquez que apparemment GCC essaie d'utiliser les caractères de guillemets intelligent unicode, mais ils sont envoyés en UTF-8 et Emacs les intercepte. Je pense que le problème ici est qu'EMACS doit transmettre le UTF-8 généré par le sous-processus au Terminal. Une idée de comment faire cela se produire?

6voto

Chris Page Points 3113

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.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X