Respuestas:
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
locale
programa (como se ve en otras respuestas aquí).
locale
variables 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 locale
variables de entorno. Por ejemplo, en MacOS puede elegir la codificación terminal y opcionalmente configurar las locale
variables de entorno en el arranque terminal en Terminal
> Preferences
> Profiles
> Advanced
.
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
Si tienes Python:
python -c "import sys; print(sys.stdout.encoding)"
Que yo sepa, no.
Las indicaciones circunstanciales de $LC_CTYPE
, locale
y 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.
Para ver la información de configuración regional actual, use el locale
comando. 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=