Nie można ustawić LC_CTYPE na domyślne ustawienia regionalne: brak takiego pliku lub katalogu

54

Mam dokładnie takie pytanie, ale nie ma rozwiązania. Próbowałem, ale to nie działa

Jak naprawić problem z lokalizacją?

$ 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

Czy to z powodu niedopasowania en_US.UTF-8 i en_US.utf8?

Jak naprawić?

Mave
źródło
Czy czytałeś to askubuntu.com/a/229512/387382 ?
Helio

Odpowiedzi:

53

Otwórz terminal i uruchom poniższe polecenie:

export LC_ALL="en_US.UTF-8"
Nazar
źródło
To działa, ale dlaczego?
Yu Jiaao
16
To niczego nie rozwiązuje, ponieważ zmienna jest niszczona pod koniec sesji ..
Etienne Gautier
Świetne rozwiązanie w tak małych słowach. Lol!
Redbob
1
Podczas eksportowania tego var otrzymuję:-bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
nnyby
36

Ten sam problem (LC_CTYPE = UTF-8, co jest błędne) może się zdarzyć, gdy zalogujesz się przez ssh z komputera Mac do Linux-a, a twój terminal automatycznie ustawi zmienne środowiskowe. Jest na to pole wyboru. Odznacz to i możesz iść. W iTerm znajduje się w profilu-> Zakładka Terminal.

raarts
źródło
2
w iTerm wyłącz pole wyboru „Preferencje> Profile> Domyślne> Terminal> Środowisko> Ustaw automatycznie zmienne regionalne”
ecerulm
1
-1: Chociaż może to działać, jest wyjątkowo inwazyjne. Potencjalnie wpływasz również na zachowanie lokalnego terminala, a także na zachowanie każdego hosta, z którym się łączysz. Chociaż twoje ustalenia są prawdziwe, lepiej jest użyć ssh_config, aby nie wysyłać LC_ * dla hostów, o których wiadomo, że mają problemy.
Max Ried
3
Czy możesz dodać własną odpowiedź, rozszerzając ją o dodatkowe wyjaśnienie, dlaczego potencjalnie wpływa to na zachowanie twojego lokalnego terminala i jak powiedzieć ssh_config, aby nie wysyłał LC_ *. Ponieważ po prostu -1 moja odpowiedź bez prawdziwego wyjaśnienia.
raarts
Jeśli łączysz się z MacOS za pomocą Terminala, przejdź do Ustawienia terminala> Zaawansowane i odznacz „Ustaw zmienne środowiskowe locale podczas uruchamiania”.
javaxian
Wydaje się, że tak się dzieje: w systemie lokalnym masz zainstalowane jakieś ustawienia narodowe, a następnie ssh do innego systemu, który nie ma zainstalowanych ustawień narodowych. Klient terminalu powie zdalnemu systemowi, jakie są twoje ustawienia regionalne, a zdalny system nie odbierze odpowiedzi w żądanym języku. Istnieją dwa sposoby, aby temu zaradzić: albo zmienisz, co jest wymagane, albo dodasz wymagane ustawienia narodowe do zdalnego systemu (który wymaga dostępu do konta root).
Jan
27

Miałem podobny problem i dodałem poniższe wiersze w moim /etc/default/localepliku:

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

Otrzymałem to z tego postu: Jak naprawić problem z lokalizacją?

Piasek1512
źródło
3
W ten sposób powstaje bardzo niechlujna konfiguracja ustawień regionalnych. /etc/environmentnie jest przeznaczony do ustawiania ustawień regionalnych w Ubuntu; /etc/default/localejest. Ponadto w przypadku pulpitu nigdy nie należy nigdy ustawiać w sposób LC_ALLciągły. Twój sposób sprawi, że interfejsy do kontrolowania ustawień języka / ustawień regionalnych na pulpicie, takich jak obsługa języków, będą bezużyteczne.
Gunnar Hjalmarsson
To faktycznie działa. Po ponownym uruchomieniu.
TranslucentCloud,
Wyloguj się i zaloguj, powinno działać
Sand1512
19

tylko z tą pracą dla mnie

sudo dpkg-reconfigure locales
sudo locale-gen
Jonathan Rodriguez
źródło
2
Właściwie sudo dpkg-reconfigure localesjest to konieczne tylko dlatego, że korzysta z locale-gen.
Etienne Gautier
9
export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
sudo dpkg-reconfigure locales
Hardik Gajjar
źródło
Prowadziłem prawie czystą instancję Vultr z problemami jak w pytaniu, zaglądałem do różnych środowisk i wszystko wyglądało dobrze. Jednak sudo dpkg-reconfigure localeszrobił coś, co musi być brakuje. Moje sesje ssh są teraz OK. Dzięki!
Jonas,
6

Dane wyjściowe localepolecenia wskazują, że w twoim środowisku występuje niepoprawny wiersz:

LC_CTYPE="UTF-8"

(„UTF-8” nie jest prawidłową nazwą regionu).

Zwykle pochodzi z /etc/default/locale. Usuń tę linię, jeśli tam jest, i zaloguj się ponownie.

Jeśli nie pochodzi stamtąd, może pochodzić z konfiguracji powłoki lub jeśli jesteś zalogowany zdalnie przez SSH, z konfiguracji komputera klienckiego.

Gunnar Hjalmarsson
źródło
Czy mogę zmienić LC_CTYPE na utf8?
Mave
@Lucas: Nie, byłoby tak samo źle. Ponieważ LANG jest ustawiony, możesz po prostu usunąć całą linię, która zaczyna się od LC_CTYPE.
Gunnar Hjalmarsson,
Jeśli chcesz ustawić LC_TYPE, powinieneś również ustawić go na „en_US.UTF-8”.
Jeśli pochodzi z konfiguracji komputera klienckiego, możesz dodać ustawienia regionalne na serwerze za pomocą dpkg-reconfigure locales.
Paul Rougieux
5

Te polecenia uratowały mi życie

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
Taras Vaskiv
źródło
5
Pliki są otwierane wcześniej sudo. Przekierowania nie będą działać, chyba że jesteś już rootem.
Martin Thornton,
3

Plik / etc / default / locale może zawierać dodatkowe (ale niepotrzebne) linie: Przykładowy plik może wyglądać następująco:

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

Aby uporządkować i pomyślnie wygenerować i ponownie skonfigurować ustawienia regionalne, usuń lub skomentuj wszystkie wiersze z tego pliku, z wyjątkiem:

LANG=en_US.UTF-8

Plik powinien w końcu wyglądać następująco:

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

Następnie uruchom dpkg-reconfigure locales, wybierz en_US.UTF-8, gdy pojawi się monit o wybranie ustawień regionalnych, i powinieneś już iść. Po Generation complete.zakończeniu procesu otrzymasz wiadomość.

Ambar
źródło
0

Udało mi się to zrobić podczas migracji plików kropek katalogu domowego na nowy komputer i przez jakiś czas nie udało mi się zidentyfikować przyczyny z powodu wyszukiwania plików, LC_ale nie LOC.

~/.bashrcPlik skopiowałem miał następujące:

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

(ta szczególna wartość wynikała z wcześniejszych eksperymentów z GNU Guix na starej maszynie; istotnym faktem jest po prostu to, że zmienna środowiskowa została ustawiona na teraz nieprawidłową ścieżkę).

Spowodowało to następujący błąd podczas uruchamiania różnych programów:

Warning: locale not supported by C library, locale unchanged

I te błędy podczas uruchamiania 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

Usunięcie (lub skomentowanie) LOCPATHlinii rozwiązało moje problemy.

phils
źródło
0

po prostu uruchom następujące:

sudo apt-get upgrade

wygeneruje wszystkie lokalizacje, a następnie ustawi wartość domyślną na US:

export LC_ALL="en_US.UTF-8"
Hosein Basafa
źródło