So erhalten Sie die Zeichenkodierung des Terminals


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

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

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"

15

Wenn Sie Python haben:

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

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.


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=
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.