Come ottenere la codifica dei caratteri del terminale


Risposte:


108

Il terminale utilizza le variabili di ambiente per determinare quale set di caratteri utilizzare, quindi puoi determinarlo osservando quelle variabili:

echo $LC_CTYPE

o

echo $LANG

4
Queste variabili di ambiente vengono utilizzate dalle applicazioni che utilizzano il terminale per I / O. Lo stesso emulatore di terminale non ne ha alcuna conoscenza e la sua codifica dei caratteri attualmente efficace è un'impostazione da qualche parte all'interno del programma di emulatore (un membro di dati all'interno di una classe libvte nel caso di GNOME Terminal).
JdeBP

1
l'ordine delle variabili qui suggerito non è buono. una soluzione più completa sarebbe qualcosa del tipo: echo $ {LC_ALL: - $ {LC_CTYPE: - $ {LANG}}}. poi di nuovo, la variabile impostata non è una garanzia che sia valida, quindi dovresti attenersi al localeprogramma (come visto in altre risposte qui).
Mike Frysinger

Come ha detto @JdeBP, il terminale non utilizza le localevariabili d'ambiente per determinarne la codifica. Il terminale può comunque far conoscere la sua codifica alle applicazioni che lo interagiscono impostando le localevariabili d'ambiente. Per esempio, su MacOS è possibile scegliere la codifica del terminale e, facoltativamente, impostare le localevariabili di ambiente all'avvio del terminale in Terminal> Preferences> Profiles> Advanced.
Maggyero

97

locale Il comando senza argomenti stamperà i valori di tutte le variabili d'ambiente rilevanti eccetto LANGUAGE.

Per la codifica corrente:

locale charmap

Per le località disponibili:

locale -a

Per le codifiche disponibili:

locale -m

1
Questo è ciò che ha funzionato per me su un sistema CentOS. Mostrava la codifica del sistema in base alle impostazioni della lingua corrente. Le impostazioni del terminale utilizzate per accedere a quella macchina sono una storia diversa e una funzione del client utilizzato.
Phil DD

45

Controlla codifica e lingua:

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

Ottieni tutte le lingue:

$ locale -a

Cambia in pt_PT.utf8:

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

16

Se hai Python:

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

1
Di tutte le offerte di cui sopra, l'unico suggerimento che ha funzionato sulla mia scatola Slackware64 v. 14.2 è stato questo frammento di python. Grazie!
Thomas Altfather Good,

6

Per quanto ne so, no.

Indicazioni circostanziali da $LC_CTYPE, localee tali potrebbero sembrare allettanti, ma queste sono completamente separate dalla codifica che l'applicazione terminale (in realtà un emulatore) sta usando quando mostra i caratteri sullo schermo.

L'unico modo per rilevare la codifica con certezza è di produrre qualcosa presente solo nella codifica, ad esempio ä, fare uno screenshot, analizzare quell'immagine e controllare se il carattere di output è corretto.

Quindi no, non è possibile, purtroppo.


0

Per vedere le informazioni sulla locale corrente, utilizzare il localecomando. Di seguito è riportato un esempio su 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=
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.