1

Я вошел в Mac, запустил Terminal, 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 пытается использовать символы умных кавычек Юникода, но они отправляются как UTF-8, и Emacs перехватывает их. Я думаю, что проблема здесь в том, что EMACS необходимо передать UTF-8, сгенерированный подпроцессом, в Терминал. Есть идеи, как это сделать?

1 ответ1

5

Удаленный хост не знает, что ваш терминал использует 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_* в /etc/ssh/sshd_config на удаленном хосте (подробности могут отличаться на удаленном хосте).

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .