$LANGが端末に与える影響

$LANGが端末に与える影響

頑張る勉強するgnome-terminal $LANG(および対応する文字エンコーディングのデフォルト設定)で変数がどのように機能するか。私はデフォルトの文字セットとしてiso8859-1(latin1)を使用しており、すべてのファイル名はこの方法でエンコードされています。

ls -l次のテストでは、ファイル名にスペイン語のアクセント文字を含むディレクトリを作成します。

ケース1:

  • ISO-8859-1で構成されたgnome端子
  • LANG「en_US-iso8859-1」に設定
  • 結果:すべてのファイルが正しく表示されます。

ケース#2:

  • gnome 端末は UTF-8 で構成されます。
  • LANG「en_US-iso8859-1」に設定
  • 結果:私が見るすべてのスペイン語の文字はゴミ文字です。これは、端末の文字エンコーディングを変更したために予想される現象です。

ケース#3:

  • ISO-8859-1で構成されたgnome端子
  • LANG「en_US-UTF-8」に設定
  • 結果:私が見るすべてのスペイン語の文字はゴミ文字です。

最後のケースで間違った文字が表示されるのはなぜですか?出力してはいけないエルエスファイル名をgnome-terminalに直接送信しますか? gnome-terminalはISO-8859-1に合わせて設定されているので、正しく見えるようにしてください。

しばらくの間、私はbashが私の$LANG変数を考慮していくつかの変換をしているかもしれないと思いました。その後、端末をUTF-8に切り替えましたが、まだ正しい文字が表示されません。私はlsの出力をxxdにパイプしていましたが、驚くべきことに、ISO-8859-1というファイルがそのままエンコードされていることがわかりました。

要約:私のリストにISO-8859-1文字が含まれていて、私の端末エミュレータが同じ文字エンコーディングで構成されている場合:それ以外の場合、LANG設定時に誰が変換を実行しますか?

あなたが提供できる助けに感謝します。

クラコニア

ベストアンサー1

設定はLANG端末設定と一致する必要があります。より正確には、(文字エンコーディング)設定はLC_CTYPE端末のエンコーディングと一致する必要があり、他のロケールは一致する必要はありません。端末のエンコーディングは通常、ロケール変数ではなく端末エミュレータのオプションによって指定されます。これはLC_CTYPE2つのガイドラインを組み合わせます。つまり、端末(入力および出力)で使用するエンコーディングをアプリケーションに通知し、ファイルに使用するエンコーディングをアプリケーションに通知します。ケース 2 と 3 では、ls出力が端末とは異なるエンコーディングで表示されることを指定したため、出力が歪んでいました。

UTF-8 と latin-1 エンコーディングを異なる時間に使用する場合は、UTF-8 を使用するように端末を設定します。これにより、LC_CTYPEUTF-8を表す値が設定されます。この設定を上書きしないでください。 (ターミナルエミュレータがそれを設定していない場合は、LC_CTYPEシェル起動ファイルまたはセッション全体で置き換えます。)UTF-8端末でlatin-1データを使用するには、次のようにします。luit(Xユーティリティスイートに含まれています)

LC_CTYPE=en_US.iso88591 luit

(たとえば、同じエンコーディングを使用する別のロケールを使用できますLC_CTYPE=es_ES.iso88591 luit。)

おすすめ記事