Я только что установил CentOS 6, и всякий раз, когда я вхожу в систему удаленно через SSH, я получаю следующую ошибку:
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8)
Когда я набираю "locale" в командной строке, я получаю следующий вывод:
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LC_CTYPE=UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
В чем может быть проблема? Как я могу решить эту проблему?
Решено, отключив «Установить переменные среды локали при запуске» в «Настройки терминала»> «Дополнительно», как показано на этом снимке экрана.
ПРИМЕЧАНИЕ. Если вы используете iTerm2, вы можете отключить параметр «Автоматически устанавливать переменные локали» в меню «Настройки»> «Профили»> «Терминал».
Добавить
LC_CTYPE="en_US.UTF-8"
к /etc/sysconfig/i18n
.
На сервере, с которого вы используете ssh, установлен ли языковой стандарт с помощью переменной среды? При просмотре моей установки CentOS 6 единственная поддерживаемая локаль, которую я могу найти, определяется как en_US.utf8
(обнаружено с помощью locale -a
команда). Может в этом проблема?
В моем тестировании, когда я установил LC_ALL
переменная среды для en_US.UTF-8
, ssh'd на сервер, вывод моей команды locale был установлен на POSIX
в моем случае. Это то же самое, что и когда я НЕ установил (т.е. не установил) LC_ALL
переменная перед ssh'ing.
Когда я установил свой LC_ALL
переменная для en_US.utf8
или en_US.utf-8
, ssh'd в мой ящик CentOS 6, выходные данные локали были такими же, как и в исходном поле.
Обратите внимание, что я также не использовал заглавные буквы для UTF.
Для меня сработало добавление символической ссылки на сервер CentOS следующим образом:
ln -s /usr/lib/locale/en_US.utf8 /usr/lib/locale/UTF-8
Как только вы выполните эти команды, выполните следующие действия:
export LC_CTYPE=UTF-8
Если вы этого не сделаете, последняя команда завершится с ошибкой:
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
Теперь еще более простое решение - просто добавить эту строку в / etc / bashrc на сервере:
export LC_CTYPE="en_US.utf8"
У меня есть это конкретное сообщение при входе с Solaris X на хост Centos.
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
Проблема возникает из 2 настроек:
Отправить переменные среды, связанные с языковым стандартом SendEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
На моем исходном хосте эти настройки были установлены следующим образом:
ИСТОЧНИК # LANG = LC_CTYPE = fr_FR.UTF-8 LC_NUMERIC = fr_FR.UTF-8 LC_TIME = fr_FR.UTF-8 LC_COLLATE = fr_FR.UTF-8 LC_MONETARY = fr_FR.UTF-8 LC_MESSAGES = fr.UTF-8 LC_MESSAGES = fr.UTF-8
Но, как вы можете видеть, для параметра LC_MESSAGES установлено значение fr.UTF-8, что не подходит для моего целевого хоста.
DEST#locale -a | grep fr_FR
fr_FR
fr_FR@euro
fr_FR.iso88591
fr_FR.iso885915@euro
fr_FR.utf8
Проблема была решена принудительно на моем исходном хосте, на .bash_profile: # export LC_ALL = fr_FR.UTF-8 export LANG = fr_FR.UTF-8
Я мог бы решить эту проблему, попросив мой хост-хост не брать эту переменную из любого ssh-соединения (как правило, или создав файл локали ssh_config для моего пользователя)
В локальной системе Centos 6.2: Это не помогло:
localedef -i en_US -f UTF-8 en_US.UTF-8
Это сработало:
localedef --no-archive -i en_US -f UTF-8 en_US.UTF-8
Я также удалил locale-archive
в /usr/lib/locale
. Не знаю, было ли это необходимо.
Это было моим исправлением в прошлом ошибок локали.
Выполните следующее: locale-gen
Затем отредактируйте /etc/locale.gen. Убедитесь, что следующее не закомментировано:
en_US.UTF-8 UTF-8
en_US ISO-8859-1
generate locale
locale-gen
С участием Iterm2, отличается.
Перейти к Iterm2 -> Preferences
, Затем перейдите к Profiles
вкладку и выберите Terminal
вкладка снизу.
Перейти к Environment
категория и снять отметку;
Автоматическая установка переменных локали
Наконец, закройте и начните новый сеанс.
и убедитесь LC_ALL="en_US.UTF-8"
находится в / etc / sysconifg / i18n или добавлен в него
пример содержания
LANG="en_GB.UTF-8"
SYSFONT="latarcyrheb-sun16"
LC_ALL="en_US.UTF-8"
редактировать /etc/sysconfig/i18n
+ Изменить LANG="us"
к LANG="en_US"
Сохраните и выйдите, выйдите из системы и снова войдите.