So erhalten Sie die Zeichenkodierung des Terminals

116

Jetzt ändere ich die Zeichenkodierung meines Gnome-Terminals in "GBK" (Standard ist UTF-8), aber wie kann ich den Wert (Zeichenkodierung) in meinem Linux erhalten?

Liang Wul
quelle

Antworten:

108

Das Terminal verwendet Umgebungsvariablen, um zu bestimmen, welcher Zeichensatz verwendet werden soll. Sie können ihn daher anhand der folgenden Variablen bestimmen :

echo $LC_CTYPE

oder

echo $LANG
Valdis
quelle
4
Diese Umgebungsvariablen werden von Anwendungen verwendet, die das Terminal für E / A verwenden. Der Terminalemulator selbst kennt sie überhaupt nicht und seine derzeit wirksame Zeichenkodierung ist eine Einstellung irgendwo im Emulatorprogramm (ein Datenelement innerhalb einer libvte-Klasse im Fall von GNOME Terminal).
JdeBP
Die hier vorgeschlagene Reihenfolge der Variablen ist nicht gut. Eine vollständigere Lösung wäre etwa: echo $ {LC_ALL: - $ {LC_CTYPE: - $ {LANG}}}. Andererseits ist die gesetzte Variable keine Garantie für ihre Gültigkeit, daher sollten Sie sich an das localeProgramm halten (wie in anderen Antworten hier zu sehen).
Mike Frysinger
Wie @JdeBP gesagt, wird das Endgerät nicht die Verwendung von localeUmgebungsvariablen , um seine Codierung zu bestimmen. Das Terminal kann jedoch Anwendungen, die mit ihm interagieren, über die Codierung informieren, indem es die localeUmgebungsvariablen festlegt. Zum Beispiel auf macOS können Sie die Terminal - Codierung wählen und gegebenenfalls die festgelegten localeUmgebungsvariablen an Klemme Start in Terminal> Preferences> Profiles> Advanced.
Maggyero
97

locale Ein Befehl ohne Argumente gibt die Werte aller relevanten Umgebungsvariablen mit Ausnahme von LANGUAGE aus.

Für die aktuelle Codierung:

locale charmap

Für verfügbare Gebietsschemas:

locale -a

Für verfügbare Codierungen:

locale -m
nyzm
quelle
1
Das hat bei mir auf einem CentOS-System funktioniert. Es zeigte die Systemcodierung basierend auf den aktuellen Spracheinstellungen. Die Terminaleinstellungen, die verwendet werden, um zu diesem Computer zu gelangen, sind eine andere Geschichte und eine Funktion des verwendeten Clients.
Phil DD
45

Überprüfen Sie die Codierung und Sprache:

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

Holen Sie sich alle Sprachen:

$ locale -a

Wechseln Sie zu pt_PT.utf8:

$ export LC_ALL=pt_PT.utf8 
$ export LANG="$LC_ALL"
Moreno
quelle
15

Wenn Sie Python haben:

python -c "import sys; print(sys.stdout.encoding)"
Martin Thoma
quelle
1
Von allen oben genannten Angeboten war der einzige Vorschlag, der auf meiner Slackware64 v. 14.2-Box funktioniert hat, dieser Python-Ausschnitt. Vielen Dank!
Thomas Altfather Good
6

Meines Wissens nein.

Indizien von $LC_CTYPE,locale und diese scheinen mögen anziehen, aber diese sind vollständig von der Codierung der Terminalanwendung (tatsächlich einem Emulator) getrennt geschehen unter Verwendung werden , wenn Zeichen auf dem Bildschirm angezeigt wird .

Die einzige Möglichkeit, die Codierung sicher zu erkennen, besteht darin, etwas auszugeben, das nur in der Codierung vorhanden ist, z ä einen Screenshot zu machen, das Bild zu analysieren und zu überprüfen, ob das Ausgabezeichen korrekt ist.

Also nein, das ist leider nicht möglich.

Pythonator
quelle
0

Verwenden Sie den localeBefehl, um die aktuellen Informationen zum Gebietsschema anzuzeigen. Unten finden Sie ein Beispiel für 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
quelle