私は変数がgnome-terminal(およびその文字エンコーディング設定オプション)でどのように動作するかを学習しようとしてい$LANG
ます。私は主な文字セットとしてiso8859-1(latin1)を使用しており、すべてのファイル名はそのようにエンコードされています。
次のテストではls -l
、ファイル名にスペイン語のアクセント付き文字を含むディレクトリを実行します。
ケース#1:
- ISO-8859-1用に構成されたgnome-terminal
LANG
「en_US-iso8859-1」に設定- 結果:すべてのファイルが正しく表示されます
ケース#2:
- UTF-8用に構成されたgnome-terminal
LANG
「en_US-iso8859-1」に設定- 結果:スペイン語の文字すべてに文字化けが表示されます。端末の文字エンコーディングを変更したため、これは予想された
ケース#3:
- ISO-8859-1用に構成されたgnome-terminal
LANG
「en_US-UTF-8」に設定- 結果:スペイン語の文字すべてに文字化けが表示されます。
この最後のケースで文字化けした文字が表示されるのはなぜですか?lsの出力は、ファイル名をそのままgnome-terminalに直接送信すべきではありませんか?そして、gnome-terminalはISO-8859-1用に構成されているので、私はそれらが正しく見えると期待していました。
一瞬、多分、おそらくbashは私の$LANG
変数を考慮し、いくつかの変換を実行していると思いました。次に、端末をUTF-8に切り替えましたが、文字が正しく表示されません。私はlsの出力をxxdにパイプしましたが、驚いたことに、ISO-8859-1というファイルがエンコードされているのがわかります。
まとめ:リストにISO-8859-1文字が含まれていて、ターミナルエミュレーターが同じ文字エンコード用に構成されている場合:LANG
他に設定されている場合、誰が変換を行っていますか?
あなたが提供できる助けをありがとう。
クラコニア