コンソールのUTF-8シーケンス

コンソールのUTF-8シーケンス

コンソールで「tree」コマンドを実行すると、次の結果が表示されます。

.
├── Annexe\ 1\ -\ Sch\303\251ma\ global\ de\ la\ base\ de\ donn\303\251es.raw
...

結果はUTF-8シーケンスで構成され、報告された文字列を人間が読める形式で取得する必要があります。この不快なことをどのように変えることができますか?

答え1

--charsetスイッチで使用する文字セットを指定できます。

   --charset charset
          Set the character set to use when outputting HTML and for line 
          drawing.

また、次の2つのスイッチが役に立ちます。

   -q     Print non-printable characters in filenames as question marks 
          instead of the default.

   -N     Print non-printable characters as is instead of as escaped octal 
          numbers.

また、次のスイッチを使用して出力を向上させることもできます。

   -A     Turn on ANSI line graphics hack when printing the indentation 
          lines.

   -S     Turn on ASCII line graphics (useful when using Linux console mode 
          fonts). This option is now equivalent to `--charset=IBM437' and 
          may eventually be depreciated.

答え2

以下を使用して出力を取得できます。

LC_ALL=C tree -A

0303と0251が有効な文字(またはそのロケールの文字シーケンス)と見なされないことを\303\251確認できます。tree

\303\251ただし、iséおよびiso-8859-1またはiso-8859-15(フランス語使用国で一般的に使用される2つの一般的な文字ごとのシングルバイト文字セット)であるUTF-8ロケールで機能します。isおよび\303isです。Ã\251©

したがって、ここでは、Cロケールと同様に、ASCIIなど、最初の128バイト値に対してのみ定義された文字セットを持つロケールにあります。

tree文字セットがUTF-8またはiso-8859-15であることがわかり、対応する0303バイトを\303

locale -aシステムにUTF-8文字セットを使用するロケールがあるかどうかを通知します。その後、次のものを選択できますfr_FR.UTF-8

LC_ALL=fr_FR.UTF-8 tree

ただし、正しく表示されるかどうかは、端末エミュレータの理解に依存します。 UTF-8 文字を表示するように構成されていない場合は機能しません。

端末エミュレータでiso-8859-1を表示できる場合は、treeUTF-8表示を有効にして次のコマンドを使用して変換できますiconv

LC_ALL=fr_FR.UTF-8 tree | iconv -f UTF-8

関連情報