実現したいこと
フリーソフト「Everything」のコマンドライン用ツールes.exeをc#上で実行し、その結果を標準出力に文字化けさせずに出しstringとして取得したい。
発生している問題・分からないこと
Processを使用することでes.exeを実行し標準出力に出すことはできるが、結果にSHIT_JIS以外の文字が混じっていると「?」に変換されてしまい正しく結果を受け取れない。
・es.exeの結果なので対象はフォルダ、ファイル名
・例)「あいうえお❤」が「あいうえお?」になってしまう
・標準出力ではなくファイルに出力する場合は文字化けしない
該当のソースコード
c#
1string searchtext="あいうえお";2System.Diagnostics.Process p = new System.Diagnostics.Process();3p.StartInfo.FileName = "es.exe";4p.StartInfo.UseShellExecute = false;5p.StartInfo.CreateNoWindow = true;6p.StartInfo.RedirectStandardOutput = true;7p.StartInfo.Arguments = $"{searchtext}";8p.Start();9do10{11 yield return p.StandardOutput.ReadLine();12} while (!p.StandardOutput.EndOfStream);
試したこと・調べたこと
上記の詳細・結果
・es.exeのオプションを調べても標準出力部分で文字コード指定できそうなものは見つからなかった(ファイル出力指定時なら可能)
・p.StartInfo.StandardOutputEncodingにUTF8などSHIFT_JIS以外を指定したら全部文字化けしてしまう
・cmdでコマンドプロンプトを起動してコマンドプロンプト上でes.exeを実行した場合は文字化けせずに結果が表示される(Processでの結果と異なるのは使用されるコマンドプロンプトが異なるため?)
補足
開発環境
・VisualStudio Community 2019
・.Net Framework4.8
0 コメント