Терминал Mac не отображает Unicode UTF-8 правильно, когда ssh в Linux и работает Emacs

Я вошел в Mac, работает терминал, ssh'ed в системе Linux и работает make в окне emacs. Мой журнал ошибок выглядит следующим образом:

_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*, ...)â

обратите внимание, что, по-видимому, GCC пытается использовать символы юникода smartquote, но они отправляются как UTF-8, и Emacs перехватывает их. Я думаю, что проблема здесь в том, что EMACS должен передать UTF-8, сгенерированный подпроцессом, в терминал. Есть идеи, как это сделать?

8
задан vy32
17.12.2022 7:17 Количество просмотров материала 2966
Распечатать страницу

1 ответ

удаленный хост не знает, что ваш терминал использует UTF-8.

по умолчанию терминал кодирует текст как UTF-8, и по умолчанию терминал передает его в оболочку терминала через LANG переменная окружения (если вы не изменили эти настройки).

вы можете увидеть кодировку (и язык), используемый с командой locale. Например, вот что написано на моем 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=

если вы запустите его локально и на удаленный хост вы должны увидеть, что удаленный хост не включает "utf-8" В значения локали.

однако, до Mac OS X Lion 10.7, по умолчанию ssh не передает LANG переменная окружения удаленного хоста. Вы можете организовать это, но для этого требуется настроить как ssh-клиент на вашем Mac для отправки LANG переменной и демон sshd на удаленном хосте, чтобы прочитать его.

см. справочные страницы ssh_config и sshd_config на Mac и удаленный хост для деталей. Вероятно, вы добавите строку вида SendEnv LANG LC_* до /etc/ssh/ssh_config файл на вашем Mac и AcceptEnv LANG LC_* in /etc/ssh/sshd_config на удаленном хосте (детали могут отличаться на удаленном хосте).

в качестве альтернативы, вы можете просто export LANG="en_US.UTF-8" после входа в удаленную оболочку (точный синтаксис зависит от используемой удаленной оболочки). Обязательно используйте правильный язык, если это не американский английский ("en_US"). Вы также можете автоматизировать это, установив LANG из скрипта запуска оболочки как ~/.bash_profile на удаленном хосте.

5
отвечен Chris Page 2022-12-18 15:05

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя

Похожие вопросы про тегам:

emacs
mac
ssh
terminal
utf-8
Вверх