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?


Respostas:


53

Abra o terminal e dispare o comando abaixo:

export LC_ALL="en_US.UTF-8"

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.


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?


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

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

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.


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

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.


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.


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"
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.