web-dev-qa-db-ja.com

LC_ALL = Cが設定されていますが、理由はわかりません

Unicodeをサポートする端末であるsimple-terminalまたはsuckless-terminalを使用しています。

私は2台のマシンを持っており、どちらも基本的に同じシステム設定でArch Linuxを実行していますが、古いマシンでのみUnicodeをサポートしています!

調査の結果、ロケールと関係があると思いますが、完全にはわかりません。

localeは以下を提供します:

[tim@x1carbon: ~]$ locale
LANG=en_DE.UTF-8
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=C

私の理解では、つまり、"..."に書き込まれるものはすべて暗黙的に設定されるため、明示的に設定されるロケールはLANGLC_ALLだけになります。

LANG=de_DE.UTF-8/etc/locale.confを設定しました。

[tim@x1carbon: ~]$ cat /etc/locale.conf
LANG=de_DE.UTF-8
LC_COLLATE=C
LANGUAGE=en_US.UTF-8

しかし、私はLC_ALLを設定したことをまったく覚えていません(私の古いマシンでは、localeを実行するとその変数は空になります)!

Sudo grep -rnw '/usr/' -e 'LC_.*=C'/usr/-ディレクトリ内のすべてのファイルを検索する検索パターン)を実行しました。これは、LC_ALL=Cを含む多くのスクリプトとファイルを出力しますが、ほとんどの場合、既存のプログラムはセットLC_ALL-変数を読み取り、一致する変数をスクリプトに追加するだけです。

実際にこの変数を設定したところ、それが誤ったレンダリングの理由であると誤解される可能性がある場所を見つけることができませんが、それでも:LC_ALLを誤ったロケールに設定すると、他の多くの問題が発生する可能性がありますおもう。

さらに、localectl statusは次のように出力します。

[tim@x1carbon: ~]$ localectl status
   System Locale: LANG=de_DE.UTF-8
                  LANGUAGE=en_US.UTF-8
                  LC_COLLATE=C
       VC Keymap: de-latin1
      X11 Layout: n/a

...これは作業中のマシンと同じ出力です。

grep-コマンドの出力をログファイルにパイプ処理しました。このファイルをどこかにアップロードできますが、まだ理由がないため、適切にアップロードする方法がわかりません。

1
Tim Hilt

そのため、Archlinux-Forumでスレッドを開いた後、誰かが、ホームディレクトリのファイルのどこかにLC_ALL=Cを設定している可能性があると指摘しました。 grep -rnw '/home/' -e 'LC_.*=C'を実行した後、.bashrcに次のような行があることがわかりました。

export LC_ALL=C

削除しました。再起動後、localeを実行すると、ほとんどのロケールでen_DE.UTF-8が得られましたが、これはさらに混乱を招きます。しかし、地域の設定(デスクトップとしてKDEを使用)を調べたところ、「フォーマット」設定がen_DEに設定されていることがわかりました。それも削除し、再起動しました。これですべてが期待どおりに機能します。

1
Tim Hilt

「これが問題になるのでしょうか?」 - はい。

ほとんどのアプリケーションは、LC_ALLLC_CTYPE、またはLANGからエンコードを取得します。これらは、このリストの最初の空ではありません。解決された値は、locale charmapでも表示されます。私の知る限り、あなたはLC_CTYPE=Cを持っていますが、あなたのLC_ALLについてはよくわかりません。これらには、CではなくUTF-8ロケールが含まれている必要があります。

「どうして、古いシステムのロケールが設定されているのか」–質問は、新しいシステムに設定されていないのはなぜですか。残念ながら答えられませんが、設定する必要があります。

0
egmont