端末の文字エンコーディングを取得する方法


回答:


108

端末は環境変数を使用して、使用する文字セットを決定します。したがって、これらの変数を調べることによって、文字セットを決定できます。

echo $LC_CTYPE

または

echo $LANG

4
これらの環境変数は、I / Oに端末を使用しているアプリケーションによって使用されます。ターミナルエミュレータ自体はそれらをまったく認識していません。現在有効な文字エンコーディングは、エミュレータプログラム内のどこか(GNOMEターミナルの場合はlibvteクラス内のデータメンバー)の設定です。
JdeBP 2017年

ここで提案されている変数の順序は適切ではありません。より完全なソリューションは次のようなものになります:$ {LC_ALL:-$ {LC_CTYPE:-$ {LANG}}}をエコーし​​ます。繰り返しますが、設定されている変数は、変数が有効であることを保証するものではないため、localeプログラムを使用する必要があります(他の回答を参照)。
Mike Frysinger 2018年

@JdeBPが言ったように、端末はエンコーディングを決定するために環境変数を使用しませlocale。ただし、端末は、locale環境変数を設定することにより、端末と対話するアプリケーションにエンコーディングを認識させることができます。例えば、MacOSであなたは、端末のエンコードを選択することができますし、任意に設定するlocaleには、端末起動時に環境変数をTerminal> Preferences> Profiles> Advanced
Maggyero

97

locale 引数なしのコマンドは、LANGUAGEを除くすべての関連する環境変数の値を出力します。

現在のエンコーディング:

locale charmap

利用可能なロケール:

locale -a

利用可能なエンコーディング:

locale -m

1
これは私にとってCentOSシステムで機能したものです。現在の言語設定に基づくシステムエンコーディングを示しています。そのマシンに到達するために使用される端末設定は別の話であり、使用されているクライアントの機能です。
Phil DD

45

エンコーディングと言語を確認します。

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

すべての言語を取得:

$ locale -a

pt_PT.utf8に変更します。

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

16

Pythonを使用している場合:

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

1
上記のすべての提供のうち、私のSlackware64 v 14.2ボックスで機能した唯一の提案は、このPythonのスニペットでした。ありがとう!
Thomas Altfather Good 2017

6

私の知る限りではありません。

情況からの指示$LC_CTYPElocale及びそのようなものが魅力的に見えるかもしれないが、これらは完全に端末アプリケーション(実際にはエミュレータ)をコードする分離されている画面上の文字を表示する際に使用することが起こります。

エンコーディングを確実に検出する唯一の方法は、エンコーディングに存在するものだけを出力することです。たとえばä、スクリーンショットを撮り、その画像を分析して、出力文字が正しいかどうかを確認します。

残念ながら、それは不可能です。


0

現在のロケール情報を表示するには、localeコマンドを使用します。以下は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=
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.