ls не может корректно отображать имена файлов с кодировкой utf8 при подключении по ssh к машине с OS X.

Вопрос или проблема

Проблема, которую я пытаюсь решить здесь, заключается в том, что в терминале SSH-сессии к машине OS X вывод команды ls не может правильно отображать закодированные в utf8 китайские символы в именах файлов (показывая что-то вроде ???).

SSH-клиенты, которые я использую, это securecrt и putty на Windows (оба настроены на использование кодировки utf8). У обоих есть эта проблема. С другой стороны, utf8-символы в содержимом файлов можно отображать правильно (например, при помощи vim и cat), а функция автозаполнения bash также может правильно отображать utf8-символы в именах файлов (как в списке кандидатов, когда есть несколько вариантов, так и в имени файла, которое автозаполняется, когда есть только один вариант).

Итак, вопрос в том, как заставить ls правильно отображать закодированные в utf8 имена файлов в терминале SSH-сессии к машине OS X?

Эта проблема обычно возникает из-за переменных окружения, так что сначала проверьте это. Введите env, вы получите результат. В моем случае установка LANG (export LANG=en_US.UTF-8) просто сработала.

Для Putty: На целевой машине OSX проверьте переменную окружения LC_CTYPE (echo $LC_CTYPE). Она должна быть UTF-8 или что-то вроде en_EN.UTF-8. (Если это что-то вроде “en_EN”, то это установлено на ISO. В этом случае измените его на en_EN.UTF-8, добавив export LC_CTYPE=en_EN.UTF-8 в ваш $HOME/.bash_profile). На вашем компьютере с Windows в Putty перейдите в конфигурацию -> окно/перевод и там выберите ту же кодировку символов, что и переменная окружения на вашей машине OSX. Если настройки переменной окружения на сервере и настройки Putty совпадают, это должно работать.

Ответ или решение

Проблема с некорректным отображением UTF-8 закодированных имён файлов при использовании команды ls в SSH-сеансах на OS X может быть решена несколькими способами. Обычно эта проблема возникает из-за неправильных переменных окружения. Следуйте этим шагам для её устранения:

  1. Проверка переменных окружения: В первую очередь, проверьте ваши текущие настройки переменных окружения. Подключившись к вашей OS X машине по SSH, выполните команду:

    env

    Обратите внимание на переменные LANG и LC_CTYPE. Если значение переменной LANG не содержит UTF-8, например, вы видите en_US, это может быть причиной вашей проблемы.

  2. Установка переменных окружения: Для решения проблемы добавьте или измените переменную LANG в вашем .bash_profile. Для этого выполните следующую команду:

    echo "export LANG=en_US.UTF-8" >> ~/.bash_profile

    Затем примените изменения:

    source ~/.bash_profile

    Аналогично, проверьте и установите LC_CTYPE:

    echo "export LC_CTYPE=en_US.UTF-8" >> ~/.bash_profile
    source ~/.bash_profile
  3. Настройки PuTTY: Если вы используете PuTTY, убедитесь, что вы правильно настроили кодировку. Откройте настройки PuTTY и выполните следующие действия:

    • Перейдите в WindowTranslation.
    • Убедитесь, что выбранная кодировка соответствует настройке LC_CTYPE на вашей OS X машине. Обычно это должно быть UTF-8.
  4. Проверка после изменений: После выполнения вышеуказанных изменений, выходите из SSH-сессии и подключайтесь снова. Теперь команда ls должна отображать имена файлов с китайскими символами корректно.

  5. Дополнительные проверки: Если проблема не решена, попробуйте проверить:

    • Версию SSH-клиента и сервера, возможно, обновление может помочь в устранении проблемы.
    • Убедитесь, что файл, имя которого вы хотите отобразить, действительно закодирован в UTF-8. Вы можете использовать команду file для проверки кодировки файла:
    file -I имя_файла

Следуя этим шагам, вы сможете настроить корректное отображение UTF-8 символов в именах файлов с помощью команды ls в SSH-сеансе на машине OS X.

Оцените материал
Добавить комментарий

Капча загружается...