Impossibile impostare LC_CTYPE sulla locale predefinita: nessun file o directory


55

Ho la domanda esatta come questa, ma non c'è soluzione. Ho provato ma non funziona

Come posso risolvere il mio problema di localizzazione?

$ 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

È a causa della mancata corrispondenza tra en_US.UTF-8 e en_US.utf8?

Come risolvere?


Risposte:


53

Apri il terminale ed esegui il comando seguente:

export LC_ALL="en_US.UTF-8"

Funziona, ma perché?
Yu Jiaao,

16
Questo non risolve nulla poiché la variabile viene distrutta alla fine della sessione ..
Etienne Gautier,


Ottima soluzione in così poche parole. Lol!
Redbob

1
Quando esporto questo var ottengo:-bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
nnyby

36

Lo stesso problema (LC_CTYPE = UTF-8, che è errato) può verificarsi quando si accede tramite ssh da un Mac a un box Linux e il terminale imposta automaticamente le variabili di ambiente. C'è una casella per quello. Deselezionalo e sei a posto. In iTerm è nel profilo-> Scheda Terminale.


2
in iTerm disattiva la casella di controllo "Preferenze> Profili> Predefinito> Terminale> Ambiente> Imposta automaticamente le variabili locali"
ecerulm

1
-1: anche se potrebbe funzionare, è estremamente invasivo. Potresti inoltre influire sul comportamento del tuo terminale locale e sul comportamento di ogni host a cui ti connetti. Sebbene le tue scoperte siano vere, è meglio usare ssh_config per fare in modo che non invii LC_ * agli host noti per avere problemi.
Max Ried

3
Potete per favore aggiungere la vostra risposta, estendendola con ulteriori spiegazioni sul perché ciò potenzialmente influisce sul comportamento del vostro terminale locale e su come dire a ssh_config di non inviare LC_ *. Perché hai appena -1 la mia risposta senza una vera spiegazione.
raarts

Se ti connetti da MacOS tramite Terminale, vai su Impostazioni Terminale> Avanzate e deseleziona "Imposta variabili di ambiente locali all'avvio".
Javavian

1
Quello che sembra accadere è: sul tuo sistema locale, hai alcune impostazioni locali installate, quindi ssh su un altro sistema, che non ha queste impostazioni locali installate. Il client terminal comunicherà al sistema remoto qual è la propria locale e il sistema remoto non risponderà nella lingua richiesta. Hai due modi per rimediare a questo: o cambi, ciò che è richiesto o aggiungi la locale richiesta al sistema remoto (che richiede l'accesso come root).
Jan

27

Ho avuto il problema simile e ho aggiunto le righe seguenti nel mio /etc/default/localefile:

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

Ho ottenuto questo da questo post: come posso risolvere il mio problema di localizzazione?


3
Bene, così facendo ti ritrovi con una configurazione locale molto disordinata. /etc/environmentnon è destinato all'impostazione locale in Ubuntu; /etc/default/localeè. Inoltre, nel caso di un desktop non dovresti mai, mai impostare in modo LC_ALLpersistente. La tua strada renderà inutili le interfacce utente per il controllo delle impostazioni di lingua / locale su un desktop, come Supporto lingua.
Gunnar Hjalmarsson

Questo funziona davvero. Dopo un riavvio.
TranslucentCloud,

Esci e accedi, dovrebbe funzionare
Sand1512

19

solo con questo lavoro per me

sudo dpkg-reconfigure locales
sudo locale-gen

2
In realtà sudo dpkg-reconfigure localesè necessario solo poiché utilizza locale-gen.
Etienne Gautier,

9
export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
sudo dpkg-reconfigure locales

Stavo eseguendo un'istanza Vultr quasi pulita con problemi come nella domanda, ho esaminato l'ambiente variando e tutto sembrava a posto. Tuttavia, ha sudo dpkg-reconfigure localesfatto qualcosa che doveva essere mancante. Le mie sessioni SSH ora sono OK. Grazie!
Jonas

6

L'output del localecomando indica che hai questa riga errata nel tuo ambiente:

LC_CTYPE="UTF-8"

("UTF-8" non è un nome di locale valido.)

Di solito viene /etc/default/locale. Rimuovi quella linea, se presente, e accedi nuovamente.

Se non proviene da lì, può provenire dalla configurazione della shell o se si è effettuato l'accesso remoto tramite SSH, dalla configurazione del computer client.


Posso cambiare LC_CTYPE in utf8?
Mave,

@Lucas: No, sarebbe altrettanto male. Poiché è impostato LANG, puoi semplicemente rimuovere l'intera riga che inizia con LC_CTYPE.
Gunnar Hjalmarsson,

Se vuoi impostare LC_TYPE, dovresti anche impostarlo su "en_US.UTF-8".

Se proviene dalla configurazione del computer client, è possibile aggiungere le impostazioni internazionali sul server con dpkg-reconfigure locales.
Paul Rougieux,

5

Questo comando mi ha salvato la vita

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
I file vengono aperti prima sudo. I reindirizzamenti non funzioneranno a meno che tu non sia già root.
Martin Thornton,

3

Il file / etc / default / locale può avere righe aggiuntive (ma non necessarie): il file di esempio può essere simile al seguente:

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

Per riordinare e generare e riconfigurare correttamente le impostazioni locali, rimuovere o commentare tutte le righe da questo file tranne:

LANG=en_US.UTF-8

Il file dovrebbe finalmente apparire come:

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

Dopodiché, esegui dpkg-reconfigure locales, seleziona en_US.UTF-8 quando ti viene richiesto di selezionare la locale e dovresti essere pronto. Riceverai un Generation complete.messaggio al termine del processo.


0

Sono riuscito a causarlo da solo durante la migrazione dei file dot della directory home su una nuova macchina e non sono riuscito a identificare la causa per un po 'a causa della ricerca dei file, LC_ma non LOC.

Il ~/.bashrcfile che ho copiato aveva il seguente:

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

(il valore particolare qui era a causa di precedenti esperimenti con GNU Guix sulla vecchia macchina; ma il fatto rilevante è semplicemente che la variabile d'ambiente era impostata su un percorso ora non valido.)

Ciò ha comportato il seguente errore durante l'esecuzione di vari programmi:

Warning: locale not supported by C library, locale unchanged

E questi errori durante l'esecuzione 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

Rimuovere (o commentare) la LOCPATHriga ha risolto i miei problemi.


0

basta eseguire quanto segue:

sudo apt-get upgrade

genererà tutte le posizioni, quindi imposta l'impostazione predefinita su US:

export LC_ALL="en_US.UTF-8"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.