Windows 10 ボックスで、コマンド ライン経由で次のコマンドを実行します。
C:\Users\idiot\Music>dir /a:d /s /b >> tom-music-2016-july.txt
目的は、すべてのディレクトリを一覧表示することです。しかし、名前にローマ字以外の文字が含まれるディレクトリは、ロシア語や中国語の文字ではなく、????? と印刷されることに気づきました。なぜでしょうか?
最初はシステムフォントの問題だと思っていました。(ロシア語の言語パックをインストールしていません)。しかし、Windowsエクスプローラーでファイル名をロシア語に変更することができます。重要なのは、ウィンドウでDIRコマンドを実行すると(出力ファイルにパイプせずに)、ロシア語の文字がはっきりと見える。
これは、何かをファイルにパイプするコマンドか、出力を読み取ろうとしている Windows テキスト エディターのいずれかに問題があることを意味しています。
ファイルを 2 つの別々のテキスト エディターと Web ブラウザーで開こうとしましたが、いずれにしても疑問符が表示されます。
この問題の原因と解決策を提案できる人はいますか?
ファイルやディレクトリ自体には何の処理を行う必要もないと考えてよろしいでしょうか? ありがとうございます。
追記:特に、ロシア語の文字がコンソール ウィンドウでは問題なく表示されるのに、ファイルにパイプされると疑問符が表示されるのはなぜなのか、不思議に思っています。
答え1
秘密ではありません。リダイレクトを使用して作成されたファイルのエンコードは、>
の現在のアクティブなコード ページに従いますcmd
。?
(疑問符) は、そのようなコード ページに文字が存在しない場合の単なる代替 (置換マーカー) です。
解決策: UTF-8
(コードページ 65001)を使用するとしてchcp 65001
次の例は(そしておそらく証明する) かなりうまくいきました:
d:\bat\UnASCII Names> chcp 1250
Active code page: 1250
d:\bat\UnASCII Names> dir /b /AD >dir1250.txt
d:\bat\UnASCII Names> chcp 65001
Active code page: 65001
d:\bat\UnASCII Names> dir /b /AD >dir65001.txt
Notepad++ で開かれたファイルdir1250.txt
:dir65001.txt
その点に注意してくださいいわゆるANSI
私のロケールではコード ページ 1250 (中央ヨーロッパ) ですが、あなたのロケールでは 1252 (米国および西ヨーロッパ) などになるかもしれません...