Não é possível definir LC_CTYPE como localidade padrão: não existe esse arquivo ou diretório

55

Eu tenho a pergunta exata como esta, mas não há solução. Eu tentei mas não funciona

Como corrijo meu problema de localidade?

$ 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

Isso ocorre devido à incompatibilidade en_US.UTF-8 e en_US.utf8?

Como consertar?

Mave
fonte
Você leu este askubuntu.com/a/229512/387382 ?
Helio

Respostas:

53

Abra o terminal e dispare o comando abaixo:

export LC_ALL="en_US.UTF-8"
Nazar
fonte
Isso funciona, mas por quê?
Yu Jiaao 26/08/17
16
Isso não resolve nada, já que a variável é destruída no final da sessão.
Etienne Gautier
Ótima solução em tão poucas palavras. Ri muito!
Redbob 7/03
11
Ao exportar essa var, eu recebo:-bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
nnyby
36

Esse mesmo problema (LC_CTYPE = UTF-8, que está errado) pode acontecer quando você faz o login através do ssh de um Mac para um Linux, e o seu terminal define automaticamente variáveis ​​de ambiente. Há uma caixa de seleção para isso. Desmarque e pronto. No iTerm está no perfil-> Guia Terminal.

raarts
fonte
2
no iTerm, desative a caixa de seleção "Preferências> Perfis> Padrão> Terminal> Ambiente> Definir variáveis ​​de localidade automaticamente"
ecerulm 6/18
11
-1: Embora isso possa funcionar, é extremamente invasivo. Você também afeta potencialmente o comportamento do seu terminal local, bem como o comportamento de todos os hosts aos quais você se conecta. Embora suas descobertas sejam verdadeiras, é melhor usar o ssh_config para que ele não envie o LC_ * para hosts conhecidos por terem problemas.
Max Ried
3
Você pode adicionar sua própria resposta, estendendo-a com mais explicações sobre por que isso afeta o comportamento do terminal local e como dizer ao ssh_config para não enviar LC_ *. Porque você apenas -1 minha resposta sem explicação real.
raarts
Se você estiver se conectando do MacOS usando o Terminal, vá para Terminal Settings> Advanced e desmarque a opção "Definir locale variáveis ​​de ambiente na inicialização".
javaxian 23/01
11
O que parece acontecer é: no seu sistema local, você tem algum código de idioma instalado e, em seguida, ssh para outro sistema, que não possui esse código de idioma instalado. O cliente do terminal informará ao sistema remoto qual é a sua localidade e o sistema remoto falhará em responder no idioma solicitado. Você tem duas maneiras de remediar isso: você altera, o que é solicitado ou adiciona o código do idioma solicitado ao sistema remoto (o que requer acesso root).
Jan
27

Eu tive o problema semelhante e adicionei as linhas abaixo no meu /etc/default/localearquivo:

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

Eu recebi este artigo: Como corrigir meu problema de localidade?

Sand1512
fonte
3
Bem, ao fazer isso, você acaba com uma configuração de localidade muito confusa. /etc/environmentnão se destina a definir locais no Ubuntu; /etc/default/localeé. Além disso, no caso de uma área de trabalho, você nunca deve definir LC_ALLpersistentemente. Seu caminho tornará inúteis as UIs para controlar as configurações de idioma / localidade em uma área de trabalho, como o Suporte ao Idioma.
Gunnar Hjalmarsson 14/03
Isso realmente funciona. Após uma reinicialização.
TranslucentCloud
Logout e login, ele deve funcionar
Sand1512
19

só com esse trabalho pra mim

sudo dpkg-reconfigure locales
sudo locale-gen
Jonathan Rodriguez
fonte
2
Na verdade, apenas sudo dpkg-reconfigure localesé necessário, pois usa o código de idioma.
Etienne Gautier
9
export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
sudo dpkg-reconfigure locales
Hardik Gajjar
fonte
Eu estava executando uma instância do Vultr quase limpa com problemas como na pergunta, verifiquei os vários ambientes e tudo parecia bem. No entanto, sudo dpkg-reconfigure localesfez algo que devia estar faltando. Minhas sessões ssh agora estão OK. Obrigado!
Jonas
6

A saída do localecomando indica que você possui esta linha incorreta no seu ambiente:

LC_CTYPE="UTF-8"

("UTF-8" não é um nome de localidade válido.)

Geralmente vem /etc/default/locale. Remova essa linha, se houver, e faça logon novamente.

Se não vier daí, poderá vir da configuração do shell ou se você estiver conectado remotamente via SSH, da configuração da máquina cliente.

Gunnar Hjalmarsson
fonte
Eu mudo LC_CTYPE para utf8?
Mave
@ Lucas: Não, isso seria tão ruim. Como LANG está definido, você pode simplesmente remover toda a linha que começa com LC_CTYPE.
Gunnar Hjalmarsson 25/03
Se você deseja definir LC_TYPE, também deve defini-lo como "en_US.UTF-8".
Se vier da configuração da máquina cliente, você poderá adicionar o código do idioma no servidor dpkg-reconfigure locales.
Paul Rougieux
5

Este comando salvou minha vida

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
fonte
5
Os arquivos são abertos antes sudo. Os redirecionamentos não funcionarão, a menos que você já seja root.
Martin Thornton
3

O arquivo / etc / default / locale pode ter linhas adicionais (mas desnecessárias): O arquivo de exemplo pode ser assim:

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

Para classificar e gerar e reconfigurar com êxito localidades, remova ou comente todas as linhas deste arquivo, exceto:

LANG=en_US.UTF-8

O arquivo deve finalmente parecer com:

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

Depois disso, execute dpkg-reconfigure locales, selecione en_US.UTF-8 quando solicitado a selecionar o código do idioma, e você deve estar pronto. Você receberá uma Generation complete.mensagem quando o processo estiver concluído.

Ambar
fonte
0

Eu mesmo consegui causar isso ao migrar arquivos de ponto do diretório inicial para uma nova máquina, e não consegui identificar a causa por um tempo por causa da pesquisa, LC_mas não por arquivos LOC.

O ~/.bashrcarquivo que copiei tinha o seguinte:

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

(o valor específico aqui foi devido a experiências anteriores com o GNU Guix na máquina antiga; mas o fato relevante é simplesmente que a variável de ambiente foi configurada para um caminho agora inválido.)

Isso resultou no seguinte erro ao executar vários programas:

Warning: locale not supported by C library, locale unchanged

E esses erros ao executar 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

Remover (ou comentar) a LOCPATHlinha resolveu meus problemas.

phils
fonte
0

basta executar o seguinte:

sudo apt-get upgrade

ele irá gerar todos os locais e defina o padrão como US:

export LC_ALL="en_US.UTF-8"
Hosein Basafa
fonte