Comment obtenir le codage des caractères du terminal

116

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

Liang Wul
la source

Réponses:

108

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

echo $LC_CTYPE

ou

echo $LANG
Valdis
la source
4
Ces variables d'environnement sont utilisées par les applications qui utilisent le terminal pour les E / S. L'émulateur de terminal lui-même n'en a aucune connaissance, et son encodage de caractères actuellement efficace est un paramètre quelque part dans le programme d'émulateur (un membre de données dans une classe libvte dans le cas du terminal GNOME).
JdeBP
1
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}}}. là encore, la variable définie n'est pas une garantie de validité, vous devez donc vous en tenir au localeprogramme (comme vu dans d'autres réponses ici).
Mike Frysinger
Comme l'a dit @JdeBP, le terminal n'utilise pas les localevariables d'environnement pour déterminer son codage. Le terminal peut cependant faire connaître son encodage aux applications qui interagissent avec lui en définissant les localevariables d'environnement. Par exemple, sur macOS , vous pouvez choisir l'encodage terminal et la possibilité de définir les localevariables d'environnement au démarrage terminal Terminal> Preferences> Profiles> Advanced.
Maggyero
97

locale La commande sans argument affichera les valeurs de toutes les variables d'environnement pertinentes à l'exception de LANGUAGE.

Pour l'encodage actuel:

locale charmap

Pour les paramètres régionaux disponibles:

locale -a

Pour les encodages disponibles:

locale -m
nyzm
la source
1
C'est ce qui a fonctionné pour moi sur un système CentOS. Il a montré l'encodage du système basé sur les paramètres de langue actuels. Les paramètres du terminal utilisés pour accéder à cette machine sont une histoire différente et une fonction du client utilisé.
Phil DD
45

Vérifiez le codage et la langue:

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

Obtenez toutes les langues:

$ locale -a

Remplacez pt_PT.utf8:

$ export LC_ALL=pt_PT.utf8 
$ export LANG="$LC_ALL"
Moreno
la source
16

Si vous avez Python:

python -c "import sys; print(sys.stdout.encoding)"
Martin Thoma
la source
1
De toutes les offres ci-dessus, la seule suggestion qui a fonctionné sur ma boîte Slackware64 v. 14.2 était cet extrait de python. Merci!
Thomas Altfather Good
6

A ma connaissance, non.

Des indications circonstancielles de $LC_CTYPE, localeet telles peuvent sembler séduisantes, mais elles sont complètement séparées du codage que l'application terminal (en fait un émulateur) utilise lors de l'affichage des caractères à l'écran.

Le seul moyen de détecter le codage avec certitude est de sortir quelque chose uniquement présent dans le codage, par exemple ä, prendre une capture d'écran, analyser cette image et vérifier si le caractère de sortie est correct.

Donc non, ce n'est malheureusement pas possible.

pythonator
la source
0

Pour voir les informations locales actuelles, utilisez la localecommande. Ci-dessous un exemple sur 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
la source