| Su | Mo | Tu | We | Th | Fr | Sa |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
.NET FrameworkではProcessクラスを使って外部exeを実行します。そのとき、標準出力をリダイレクトさせて、Processの側で受け取ることができます。
ところが、Processクラスは受け取った標準出力を勝手にShift-JIS(?)にエンコードしてしまうため、受け取った標準出力がUnicodeその他の文字コードだと、得られる文字列は化け化けになってしまいます。困りますね。
たとえばHyper Estraierのestcmd.exeは出力をUnicodeで返してくるんですが、これを素直にProcessクラスで受け取ると文字化けで使い物になりません。超fuck。
なんとかしてProcessクラスに対して標準出力の文字コードを指定してやりたいところですが、どうも無理なんじゃないかと思われます。少なくとも僕の知識では無理でした。Process.StandardOutput.CurrentEncodingが文字コードの変換をしていると思うのですが、これがReadOnlyになっていてどうにもなりません。
で。対処策としては、間に別のexeを挟む、ということになります。
たとえば、cmd.exe(コマンドプロンプト)を間に挟んで、ファイルとしてリダイレクトし、それをStreamReaderクラス等で読み直すとか。
ファイルを経由するのがだるいので、代理でプログラムを実行して、得られた標準出力をUnicodeに直してから出力し直すプログラムがあれば良いのですが。まあ、とりあえずはファイルを経由する実装でやっておこう。

