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
私の理解では、つまり、"..."
に書き込まれるものはすべて暗黙的に設定されるため、明示的に設定されるロケールはLANG
とLC_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
-コマンドの出力をログファイルにパイプ処理しました。このファイルをどこかにアップロードできますが、まだ理由がないため、適切にアップロードする方法がわかりません。
そのため、Archlinux-Forumでスレッドを開いた後、誰かが、ホームディレクトリのファイルのどこかにLC_ALL=C
を設定している可能性があると指摘しました。 grep -rnw '/home/' -e 'LC_.*=C'
を実行した後、.bashrcに次のような行があることがわかりました。
export LC_ALL=C
削除しました。再起動後、locale
を実行すると、ほとんどのロケールでen_DE.UTF-8
が得られましたが、これはさらに混乱を招きます。しかし、地域の設定(デスクトップとしてKDEを使用)を調べたところ、「フォーマット」設定がen_DEに設定されていることがわかりました。それも削除し、再起動しました。これですべてが期待どおりに機能します。
「これが問題になるのでしょうか?」 - はい。
ほとんどのアプリケーションは、LC_ALL
、LC_CTYPE
、またはLANG
からエンコードを取得します。これらは、このリストの最初の空ではありません。解決された値は、locale charmap
でも表示されます。私の知る限り、あなたはLC_CTYPE=C
を持っていますが、あなたのLC_ALL
についてはよくわかりません。これらには、CではなくUTF-8ロケールが含まれている必要があります。
「どうして、古いシステムのロケールが設定されているのか」–質問は、新しいシステムに設定されていないのはなぜですか。残念ながら答えられませんが、設定する必要があります。