コンソールで「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
ただし、 が である UTF-8 ロケールでは有効で\303\251
あり、 が であり である iso-8859-1 または iso- 8859-15 é
(フランス語圏の国で一般的な 2 つの 1 文字あたり 1 バイトの文字セット) では有効\303
です。Ã
\251
©
したがって、ここでは、ASCII が C ロケールの場合のように、文字セットが最初の 128 バイトの値に対してのみ定義されているロケールにいることが示唆されます。
文字セットが UTF-8 または iso-8859-15 であることがわかったらtree
、0303 バイトは に変換されません \303
。
locale -a
システムに UTF-8 文字セットのロケールがあるかどうかがわかります。次に、次のように選択しますfr_FR.UTF-8
。
LC_ALL=fr_FR.UTF-8 tree
ただし、正しく表示されるかどうかは、ターミナル エミュレーターが何を理解しているかによって異なります。UTF-8 文字を表示するように設定されていない場合は、機能しません。
ターミナル エミュレータが iso-8859-1 を表示できる場合は、tree
次のようにして UTF-8 を表示し、変換することができますiconv
。
LC_ALL=fr_FR.UTF-8 tree | iconv -f UTF-8