Comment obtenir le codage des caractères du terminal


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

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

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"

16

Si vous avez Python:

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

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.


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=
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.