treeをリダイレクトすると文字化けした

tree_encoding_blog_post.md

treeコマンドの結果をリダイレクトでファイルに保存すると、以下のような文字化けが発生します:

I:. │ .flutter-plugins-dependencies │ .fvmrc

上記のような正常な表示が、以下のように化けてしまいます:

I:. ��������.flutter-plugins-dependencies ��������.fvmrc

または

I:. ・ス・ス・ス・ス・ス・ス・ス・ス.flutter-plugins-dependencies ・ス・ス・ス・ス・ス・ス・ス・ス.fvmrc

原因

この問題は文字エンコーディングの違いによって発生します:

  1. treeコマンドの出力: Windowsの既定エンコーディング(CP932/Shift_JIS)
  2. ファイル読み込み時: UTF-8として解釈される

この不一致により、罫線文字(, ├─, └─など)が正しく表示されません。

解決方法

方法1: PowerShellのOut-Fileコマンドレットを使用(推奨)

tree /F | Out-File -FilePath filename.txt -Encoding UTF8

この方法により、最初からUTF-8エンコーディングでファイルが作成されます。

方法2: コマンドプロンプトでコードページを変更

chcp 65001 tree /F > filename.txt

chcp 65001でUTF-8コードページに切り替えてから実行します。

方法3: 既存ファイルの変換

既に文字化けしたファイルがある場合:

Get-Content filename.txt -Encoding Default | Out-File filename_fixed.txt -Encoding UTF8

treeコマンドのオプション解説

/Fオプションの違い

  • tree/Fなし): ディレクトリ構造のみ表示
  • tree /F/Fあり): ディレクトリ構造とファイル名の両方を表示

実行例

/Fなしの場合:

フォルダー パスの一覧: ボリューム HDCZ-UT I:\PROJECT\FOLDER ├─subfolder1 ├─subfolder2 └─subfolder3

/Fありの場合:

フォルダー パスの一覧: ボリューム HDCZ-UT I:\PROJECT\FOLDER │ file1.txt │ file2.txt ├─subfolder1 │ subfile1.txt ├─subfolder2 └─subfolder3 subfile2.txt

まとめ

Windowsのtreeコマンドで文字化けを防ぐには:

  1. PowerShellのOut-Fileコマンドレットを使用する
  2. 明示的にUTF-8エンコーディングを指定する
  3. 単純なリダイレクト(>)は避ける

コメント

このブログの人気の投稿

一部のユーザだけ NET::ERR_CERT_REVOKED でサイトにアクセスできない

[AWS] WAF を自分で組み立てるなら SAM でテンプレート書いた方が楽だよ

ミニマムなAWS Summit Tokyo 2019 Day3に行ってきたのでまとめレポート