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

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

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"

16

Si tienes Python:

python -c "import sys; print(sys.stdout.encoding)"

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.


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=
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.