No se puede establecer LC_CTYPE en la configuración regional predeterminada: no existe tal archivo o directorio


55

Tengo la pregunta exacta como esta, pero no hay solución. Lo intenté pero no funciona

¿Cómo soluciono mi problema de configuración regional?

$ 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

¿Esto se debe a la falta de coincidencia en_US.UTF-8 y en_US.utf8?

¿Como arreglar?


Respuestas:


53

Abra la terminal y dispare el siguiente comando:

export LC_ALL="en_US.UTF-8"

Esto funciona, pero ¿por qué?
Yu Jiaao

16
Esto no resuelve nada ya que la variable se destruye al final de la sesión ..
Etienne Gautier


Gran solución en tan pocas palabras. Jajaja
Redbob

1
Al exportar esta var me sale:-bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
nnyby

36

Este mismo problema (LC_CTYPE = UTF-8, que está mal) puede suceder cuando inicia sesión a través de ssh desde una Mac a un cuadro de Linux, y su terminal establece automáticamente las variables de entorno. Hay una casilla de verificación para eso. Desactívala y listo. En iTerm está en el perfil-> Pestaña Terminal.


2
en iTerm deshabilite la casilla de verificación "Preferencias> Perfiles> Predeterminado> Terminal> Entorno> Establecer variables locales automáticamente"
ecerulm

1
-1: Si bien esto podría funcionar, es extremadamente invasivo. También puede afectar el comportamiento de su terminal local, así como el comportamiento de cada host al que se conecta. Si bien sus hallazgos son ciertos, es una mejor idea usar ssh_config para que no envíe el LC_ * para los hosts que se sabe que tienen problemas.
Max Ried

3
¿Puede agregar su propia respuesta, extendiéndola con más explicaciones de por qué esto afecta potencialmente el comportamiento de su terminal local y cómo decirle a ssh_config que no envíe LC_ *. Porque solo -1 mi respuesta sin explicación real.
raarts

Si te estás conectando desde MacOS usando Terminal, ve a Configuración de terminal> Avanzado y desmarca "Establecer variables de entorno de configuración regional al inicio".
Java

1
Lo que parece suceder es: en su sistema local, tiene una configuración regional instalada, luego pasa a otro sistema, que no tiene esta configuración regional instalada. El cliente del terminal le dirá al sistema remoto cuál es su ubicación, y el sistema remoto no responderá en el idioma solicitado. Tiene dos formas de remediar esto: cambia, lo que se solicita o agrega la configuración regional solicitada al sistema remoto (que requiere acceso de root).
enero

27

Tuve el problema similar y agregué las siguientes líneas en mi /etc/default/localearchivo:

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

Obtuve esto de esta publicación: ¿Cómo soluciono mi problema de configuración regional?


3
Bueno, al hacerlo, terminas con una configuración regional muy desordenada. /etc/environmentno está destinado a configurar configuraciones regionales en Ubuntu; /etc/default/localees. Además, en el caso de un escritorio, nunca debe establecerse de forma LC_ALLpersistente. A su manera, las UI para controlar la configuración de idioma / configuración regional en un escritorio, como Language Support, serán inútiles.
Gunnar Hjalmarsson

Esto realmente funciona. Después de un reinicio.
TranslucentCloud

Cerrar sesión e
iniciar


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

Estaba ejecutando una instancia de Vultr casi limpia con problemas como en la pregunta, busqué en el entorno y todo parecía estar bien. Sin embargo, sudo dpkg-reconfigure localeshizo algo que debió faltar. Mis sesiones ssh ahora están bien. ¡Gracias!
Jonas

6

El resultado del localecomando indica que tiene esta línea incorrecta en su entorno:

LC_CTYPE="UTF-8"

("UTF-8" no es un nombre de configuración regional válido).

Por lo general proviene de /etc/default/locale. Elimine esa línea, si está allí, y vuelva a iniciar sesión.

Si no proviene de allí, puede provenir de su configuración de shell, o si ha iniciado sesión de forma remota a través de SSH, desde la configuración de la máquina cliente.


¿Cambio LC_CTYPE a utf8?
Mave

@Lucas: No, eso sería igual de malo. Como LANG está configurado, simplemente puede eliminar toda la línea que comienza con LC_CTYPE.
Gunnar Hjalmarsson

Si desea establecer LC_TYPE, también debe establecerlo en "en_US.UTF-8".

Si proviene de la configuración de la máquina cliente, puede agregar la configuración regional en el servidor con dpkg-reconfigure locales.
Paul Rougieux

5

Este comando me salvó la 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

55
Los archivos se abren antes sudo. Las redirecciones no funcionarán a menos que ya haya sido root.
Martin Thornton

3

El archivo / etc / default / locale puede tener líneas adicionales (pero innecesarias): el archivo de ejemplo puede verse así:

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

Para ordenar y generar y reconfigurar con éxito las configuraciones regionales, elimine o comente todas las líneas de este archivo, excepto:

LANG=en_US.UTF-8

El archivo finalmente debería verse así:

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

Después de esto, ejecute dpkg-reconfigure locales, seleccione en_US.UTF-8 cuando se le solicite que seleccione la configuración regional, y debería estar listo. Recibirá un Generation complete.mensaje cuando se complete el proceso.


0

Logré causar esto yo mismo al migrar los archivos de puntos del directorio de inicio a una nueva máquina, y no pude identificar la causa por un tiempo debido a la búsqueda de archivos LC_pero no LOC.

El ~/.bashrcarchivo que copié tenía lo siguiente:

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

(el valor particular aquí fue debido a experimentos previos con GNU Guix en la máquina antigua; pero el hecho relevante es simplemente que la variable de entorno se configuró en una ruta ahora no válida).

Esto dio como resultado el siguiente error al ejecutar varios programas:

Warning: locale not supported by C library, locale unchanged

Y estos errores al ejecutar 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

Eliminar (o comentar) la LOCPATHlínea resolvió mis problemas.


0

solo ejecuta lo siguiente:

sudo apt-get upgrade

generará todas las ubicaciones, luego establecerá el valor predeterminado en EE. UU .:

export LC_ALL="en_US.UTF-8"
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.