Удаленный хост не знает, что ваш терминал использует 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
на удаленном хосте.