125 votes

Comment obtenir l'encodage des caractères du terminal ?

Maintenant j'ai changé l'encodage des caractères de mon terminal gnome en "GBK" (par défaut c'est UTF-8), mais comment puis-je obtenir la valeur (encodage des caractères) dans mon Linux ?

4 votes

114voto

Valdis Points 1508

Le terminal utilise variables d'environnement pour déterminer jeu de caractères à utiliser, donc vous pouvez le déterminer en regardant ces variables :

echo $LC_CTYPE

o

echo $LANG

4 votes

Ces variables d'environnement sont utilisées par les applications qui utilisent le terminal pour les entrées/sorties. L'émulateur de terminal lui-même n'en a aucune connaissance, et son encodage de caractères actuellement effectif est un paramètre situé quelque part dans le programme de l'émulateur (un membre de données dans une classe libvte dans le cas de GNOME Terminal).

1 votes

L'ordre des variables suggéré ici n'est pas bon. une solution plus complète serait quelque chose comme : echo ${LC_ALL:-${LC_CTYPE:-${LANG}}}. encore une fois, la variable étant définie n'est pas une garantie qu'elles sont valides, donc vous devriez vous en tenir au locale (comme on l'a vu dans d'autres réponses ici).

0 votes

Comme l'a dit @JdeBP, le terminal fait no utiliser le locale variables d'environnement pour déterminer son encodage. Le terminal peut toutefois faire connaître son encodage aux applications qui interagissent avec lui en définissant l'option locale les variables d'environnement. Par exemple, sous macOS, vous pouvez choisir l'encodage du terminal et, éventuellement, définir le paramètre locale les variables d'environnement au démarrage du terminal dans Terminal > Preferences > Profiles > Advanced .

103voto

nyzm Points 1576

locale sans arguments affichera les valeurs de toutes les variables d'environnement pertinentes, à l'exception de LANGUAGE.

Pour l'encodage actuel :

locale charmap

Pour les langues disponibles :

locale -a

Pour les encodages disponibles :

locale -m

1 votes

C'est ce qui a fonctionné pour moi sur un système CentOS. Il affiche l'encodage du système en fonction des paramètres de langue actuels. Les paramètres du terminal utilisé pour accéder à cette machine sont une autre histoire et une fonction du client utilisé.

46voto

Moreno Points 400

Vérifiez l'encodage et la langue :

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

Obtenez toutes les langues :

$ locale -a

Changer en pt_PT.utf8 :

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

17voto

moose Points 4945

Si vous avez Python :

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

6voto

pythonator Points 171

A ma connaissance, non.

Des indications circonstancielles de $LC_CTYPE , locale et autres peuvent sembler séduisants, mais ils sont complètement séparés de l'encodage que l'application du terminal (en fait un émulateur) utilise pour afficher les caractères à l'écran.

La seule façon de détecter l'encodage avec certitude est de sortir quelque chose qui n'est présent que dans l'encodage, par ex. ä Prenez une capture d'écran, analysez cette image et vérifiez si le caractère de sortie est correct.

Donc non, ce n'est pas possible, malheureusement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X