treeをリダイレクトすると文字化けした
treeコマンドの結果をリダイレクトでファイルに保存すると、以下のような文字化けが発生します:
I:.
│ .flutter-plugins-dependencies
│ .fvmrc
上記のような正常な表示が、以下のように化けてしまいます:
I:.
��������.flutter-plugins-dependencies
��������.fvmrc
または
I:.
・ス・ス・ス・ス・ス・ス・ス・ス.flutter-plugins-dependencies
・ス・ス・ス・ス・ス・ス・ス・ス.fvmrc
原因
この問題は文字エンコーディングの違いによって発生します:
treeコマンドの出力: Windowsの既定エンコーディング(CP932/Shift_JIS)- ファイル読み込み時: 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コマンドで文字化けを防ぐには:
- PowerShellの
Out-Fileコマンドレットを使用する - 明示的にUTF-8エンコーディングを指定する
- 単純なリダイレクト(
>)は避ける
コメント
コメントを投稿