Cómo obtener la codificación de caracteres de la terminal

Respuestas:

108

La terminal usa variables de entorno para determinar qué juego de caracteres usar, por lo tanto, puede determinarlo observando esas variables:

echo $LC_CTYPE

o

echo $LANG
Valdis
fuente
4
Estas variables de entorno son utilizadas por aplicaciones que utilizan el terminal para E / S. El emulador de terminal en sí mismo no tiene conocimiento alguno de ellos, y su codificación de caracteres actualmente efectiva es una configuración en algún lugar dentro del programa del emulador (un miembro de datos dentro de una clase libvte en el caso de GNOME Terminal).
JdeBP
el orden de las variables sugerido aquí no es bueno. una solución más completa sería algo como: echo $ {LC_ALL: - $ {LC_CTYPE: - $ {LANG}}}. por otra parte, la variable que se establece no es una garantía de que sean válidas, por lo que debe atenerse al localeprograma (como se ve en otras respuestas aquí).
Mike Frysinger
Como dijo @JdeBP, el terminal no usa las localevariables de entorno para determinar su codificación. Sin embargo, el terminal puede permitir que las aplicaciones que interactúan con él conozcan su codificación configurando las localevariables de entorno. Por ejemplo, en MacOS puede elegir la codificación terminal y opcionalmente configurar las localevariables de entorno en el arranque terminal en Terminal> Preferences> Profiles> Advanced.
Maggyero
97

locale El comando sin argumentos imprimirá los valores de todas las variables de entorno relevantes, excepto LANGUAGE.

Para la codificación actual:

locale charmap

Para las configuraciones regionales disponibles:

locale -a

Para codificaciones disponibles:

locale -m
nyzm
fuente
1
Esto es lo que funcionó para mí en un sistema CentOS. Mostró la codificación del sistema según la configuración de idioma actual. La configuración de la terminal utilizada para llegar a esa máquina es una historia diferente y una función del cliente que se utiliza.
Phil DD
45

Verifique la codificación y el idioma:

$ echo $LC_CTYPE
ISO-8859-1
$ echo $LANG
pt_BR

Obtenga todos los idiomas:

$ locale -a

Cambie a pt_PT.utf8:

$ export LC_ALL=pt_PT.utf8 
$ export LANG="$LC_ALL"
Moreno
fuente
16

Si tienes Python:

python -c "import sys; print(sys.stdout.encoding)"
Martín Thoma
fuente
1
De todas las ofertas anteriores, la única sugerencia que funcionó en mi caja Slackware64 v. 14.2 fue este fragmento de python. ¡Gracias!
Thomas Altfather Good
6

Que yo sepa, no.

Las indicaciones circunstanciales de $LC_CTYPE, localey tal pueden parecer atractivas, pero están completamente separadas de la codificación que la aplicación de terminal (en realidad un emulador) está usando al mostrar caracteres en la pantalla.

La única forma de detectar la codificación con seguridad es generar algo que solo esté presente en la codificación, por ejemplo ä, tomar una captura de pantalla, analizar esa imagen y verificar si el carácter de salida es correcto.

Entonces no, lamentablemente no es posible.

pythonator
fuente
0

Para ver la información de configuración regional actual, use el localecomando. A continuación se muestra un ejemplo en RHEL 7.8

[usr@host ~]$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.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=
Ashish Bhosle
fuente