Вопрос или проблема
Проблема, которую я пытаюсь решить здесь, заключается в том, что в терминале 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 может быть решена несколькими способами. Обычно эта проблема возникает из-за неправильных переменных окружения. Следуйте этим шагам для её устранения:
-
Проверка переменных окружения: В первую очередь, проверьте ваши текущие настройки переменных окружения. Подключившись к вашей OS X машине по SSH, выполните команду:
env
Обратите внимание на переменные
LANG
иLC_CTYPE
. Если значение переменнойLANG
не содержитUTF-8
, например, вы видитеen_US
, это может быть причиной вашей проблемы. -
Установка переменных окружения: Для решения проблемы добавьте или измените переменную
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
-
Настройки PuTTY: Если вы используете PuTTY, убедитесь, что вы правильно настроили кодировку. Откройте настройки PuTTY и выполните следующие действия:
- Перейдите в
Window
→Translation
. - Убедитесь, что выбранная кодировка соответствует настройке
LC_CTYPE
на вашей OS X машине. Обычно это должно бытьUTF-8
.
- Перейдите в
-
Проверка после изменений: После выполнения вышеуказанных изменений, выходите из SSH-сессии и подключайтесь снова. Теперь команда
ls
должна отображать имена файлов с китайскими символами корректно. -
Дополнительные проверки: Если проблема не решена, попробуйте проверить:
- Версию SSH-клиента и сервера, возможно, обновление может помочь в устранении проблемы.
- Убедитесь, что файл, имя которого вы хотите отобразить, действительно закодирован в UTF-8. Вы можете использовать команду
file
для проверки кодировки файла:
file -I имя_файла
Следуя этим шагам, вы сможете настроить корректное отображение UTF-8 символов в именах файлов с помощью команды ls
в SSH-сеансе на машине OS X.