2011-03-15 16 views
81

Ahora cambio la codificación de caracteres de mi gnome-terminal a "GBK" (por defecto es UTF-8), pero ¿cómo puedo obtener el valor (codificación de caracteres) en mi Linux?Cómo obtener codificación de caracteres del terminal

+3

writeup corta: [Terminales Unix: Sobrevivir a la codificación Infierno] (http://benjamin-schweizer.de/unix-terminals-surviving-the-encoding-hell. html) – miku

Respuesta

73

El terminal utiliza environment variables para determinar qué character set de usar, por lo tanto, se puede determinar por mirar esas variables:

echo $LC_CTYPE 

o

echo $LANG 
+3

Las aplicaciones que usan el terminal para E/S usan estas variables de entorno. 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 emulador (un miembro de datos dentro de una clase libvte en el caso del Terminal GNOME). – JdeBP

+0

el orden de las variables sugeridas aquí no es bueno. una solución más completa sería algo así como: echo $ {LC_ALL: - $ {LC_CTYPE: - $ {LANG}}}. una vez más, la variable que se está configurando no garantiza que sea válida, por lo que debe apegarse al programa 'locale' (como se ve en otras respuestas aquí). –

+0

Como dijo @JdeBP, el terminal * no * usa las variables de entorno 'locale' para determinar su codificación. Sin embargo, el terminal puede permitir que las aplicaciones que lo interactúan conozcan su codificación estableciendo las variables de entorno 'locale'.Por ejemplo, en macOS puede elegir la codificación del terminal y opcionalmente establecer las variables de entorno 'locale' al inicio del terminal en' Terminal'> 'Preferences'>' Profiles'> 'Advanced'. – Maggyero

41

Comprobar codificación y el idioma:

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

Obtener todos los idiomas:

$ locale -a 

Cambiar para pt_PT.utf8:

comando
$ export LC_ALL=pt_PT.utf8 
$ export LANG="$LC_ALL" 
70

locale sin argumentos imprimirá los valores de todas las variables de entorno correspondientes a excepción de idioma.

Para la codificación actual:

locale charmap 

Para los locales disponibles:

locale -a 

Para codificaciones disponibles:

locale -m 
4

Que yo sepa, no.

Las indicaciones circunstanciales de $LC_CTYPE, locale y tales pueden parecer atractivas, pero están completamente separadas de la codificación que la aplicación de terminal (en realidad un emulador) usa cuando muestra caracteres en la pantalla.

La única forma de detectar la codificación es sacar algo solo presente en la codificación, p. ä, tome una captura de pantalla, analice esa imagen y verifique si el carácter de salida es correcto.

Así que no, no es posible, por desgracia.

3

Si tiene Python:

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

De todas las ofertas anteriores, la única sugerencia que funcionó en mi caja de Slackware64 v. 14.2 fue este fragmento de pitón. ¡Gracias! –

Cuestiones relacionadas