Невозможно установить LC_CTYPE в качестве локали по умолчанию: нет такого файла или каталога

56

У меня есть точный вопрос как это, но нет никакого решения. Я пытался, но это не работает

Как мне исправить проблему с локалью?

$ 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
LANGUAGE=
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=

$ locale -a
locale: Cannot set LC_CTYPE to default locale: No such file or directory
C
C.UTF-8
en_US.utf8
POSIX

Это из-за несовпадения en_US.UTF-8 и en_US.utf8?

Как исправить?

Mave
источник
Вы читали этот askubuntu.com/a/229512/387382 ?
Helio

Ответы:

53

Откройте терминал и выполните следующую команду:

export LC_ALL="en_US.UTF-8"
Назар
источник
Это работает, но почему?
Ю Цзяо
16
Это ничего не решает, так как переменная уничтожается в конце сеанса ..
Этьен Готье
Отличное решение в нескольких словах. Лол!
Редбоб
1
При экспорте этой -bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
переменной
36

Та же самая проблема (LC_CTYPE = UTF-8, что неправильно) может возникнуть, когда вы входите через ssh с Mac в Linux, и ваш терминал автоматически устанавливает переменные окружения. Для этого есть флажок. Снимите флажок, и вы готовы идти. В iTerm это находится в профиле-> вкладка терминала.

raarts
источник
2
в iTerm отключите флажок «Предпочтения> Профили> По умолчанию> Терминал> Среда> Автоматически устанавливать переменные локали»
ecerulm
1
-1: Хотя это может сработать, это чрезвычайно агрессивно. Вы также можете повлиять на поведение вашего локального терминала, а также на поведение каждого хоста, к которому вы подключаетесь. Хотя ваши выводы верны, лучше использовать ssh_config, чтобы он не отправлял LC_ * для хостов, о которых известно, что у них проблемы.
Макс Райд
3
Можете ли вы добавить свой собственный ответ, расширив его дополнительным объяснением того, почему это потенциально влияет на поведение вашего локального терминала, и как сказать ssh_config не отправлять LC_ *. Потому что вы просто -1 мой ответ без реального объяснения.
raarts
Если вы подключаетесь из MacOS с помощью терминала, перейдите в «Настройки терминала»> «Дополнительно» и снимите флажок «Задавать переменные среды локали при запуске».
javaxian
1
Кажется, что происходит: в вашей локальной системе у вас установлена ​​какая-то локаль, а затем вы перешли в другую систему, в которой эта локаль не установлена. Терминальный клиент сообщит удаленной системе, какой у вас язык, и удаленная система не сможет ответить на запрошенном языке. У вас есть два способа исправить это: либо изменить то, что запрашивается, либо добавить запрашиваемую локаль в удаленную систему (для которой требуется доступ с правами root).
Jan
27

У меня была похожая проблема, и я добавил следующие строки в мой /etc/default/localeфайл:

LC_CTYPE="en_US.UTF-8"
LC_ALL="en_US.UTF-8"
LANG="en_US.UTF-8"

Я получил это из этого поста: Как мне исправить проблему с локалью?

Sand1512
источник
3
Что ж, тем самым вы получите очень грязную конфигурацию локали. /etc/environmentне предназначен для установки локалей в Ubuntu; /etc/default/localeявляется. Кроме того, в случае с настольным компьютером вы никогда не должны устанавливать LC_ALLнастойчиво. Ваш способ сделает бесполезными пользовательские интерфейсы для управления настройками языка / локали на рабочем столе, такими как поддержка языков.
Гуннар Хьялмарссон
Это на самом деле работает. После перезагрузки.
TranslucentCloud
Выйти и
войти
19

только с этой работой для меня

sudo dpkg-reconfigure locales
sudo locale-gen
Джонатан Родригес
источник
2
На самом деле только sudo dpkg-reconfigure localesнеобходимо, так как он использует locale-gen.
Этьен Готье
9
export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
sudo dpkg-reconfigure locales
Хардик Гаджар
источник
Я управлял почти чистым экземпляром Vultr с проблемами, как в вопросе, изучал переменные окружения, и все выглядело хорошо. Тем sudo dpkg-reconfigure localesне менее, сделал то, что, должно быть, пропало. Мои сеансы SSH теперь в порядке. Спасибо!
Джонас
6

Вывод localeкоманды указывает, что в вашей среде есть эта неправильная строка:

LC_CTYPE="UTF-8"

(«UTF-8» не является допустимым именем локали.)

Это обычно происходит из /etc/default/locale. Пожалуйста, удалите эту строку, если она есть, и перезапустите.

Если это не происходит оттуда, это может произойти из конфигурации вашей оболочки, или если вы вошли в систему удаленно через SSH, из конфигурации клиентского компьютера.

Гуннар Хьялмарссон
источник
Могу ли я изменить LC_CTYPE на utf8?
Сделано
@ Лукас: Нет, это было бы так же плохо. Поскольку LANG установлен, вы можете просто удалить всю строку, которая начинается с LC_CTYPE.
Гуннар Хьялмарссон
Если вы хотите установить LC_TYPE, вы также должны установить его в «en_US.UTF-8».
Если это происходит из конфигурации клиентского компьютера, вы можете добавить локаль на сервере с помощью dpkg-reconfigure locales.
Поль Ружье,
5

Эти команды спасли мою жизнь

sudo echo "LC_ALL=en_US.UTF-8" >> /etc/environment
sudo echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
sudo echo "LANG=en_US.UTF-8" > /etc/locale.conf
sudo locale-gen en_US.UTF-8
Тарас Васькив
источник
5
Файлы открываются раньше sudo. Перенаправления не будут работать, если вы уже не являетесь пользователем root.
Мартин Торнтон
3

Файл / etc / default / locale может иметь дополнительные (но ненужные) строки: Файл примера может выглядеть следующим образом:

#  File generated by update-locale
LANG=en_US.UTF-8
LANGUAGE="en_IN:en

Чтобы разобраться и успешно создать и перенастроить языковые стандарты, удалите или закомментируйте все строки из этого файла, кроме:

LANG=en_US.UTF-8

Файл должен наконец выглядеть так:

#  File generated by update-locale
LANG=en_US.UTF-8
# LANGUAGE="en_IN:en

После этого запустите dpkg-reconfigure locales, выберите en_US.UTF-8, когда будет предложено выбрать локаль, и все будет хорошо. Вы получите Generation complete.сообщение, когда процесс будет завершен.

Амбар
источник
0

Мне удалось самому вызвать эту проблему при переносе файлов точек домашнего каталога на новый компьютер, и я некоторое время не мог определить причину из-за поиска файлов, LC_но не смог LOC.

~/.bashrcФайл я скопировал имел следующее:

export LOCPATH=/var/guix/profiles/per-user/root/guix-profile/lib/locale

(Особое значение здесь было из-за предыдущих экспериментов с GNU Guix на старой машине; но релевантным фактом является просто то, что для переменной среды был задан недопустимый путь.)

Это приводило к следующей ошибке при запуске различных программ:

Warning: locale not supported by C library, locale unchanged

И эти ошибки при запуске locale:

locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory

Удаление (или комментирование) LOCPATHстроки решило мои проблемы.

Phils
источник
0

просто запустите следующее:

sudo apt-get upgrade

он сгенерирует все локации, затем установит значение по умолчанию US:

export LC_ALL="en_US.UTF-8"
Хосейн Басафа
источник