designed by www.qrone.org
January
2009
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
INFOMATION
- 自己紹介
- マイミク申請はお気軽に:-)
- いまいち使い方がわかりません
- 気になるURLをクリップ
- Awstats を使っています
RECENT ENTRIES
CATEGORIES
MONTHLY ARCHIVES
HATENA BOOKMARK
BLOG PET
LICENCE
CONTACT
shin at windy dot ac
2005年7月26日
[C#]外部exeの標準出力がUnicodeだと化ける このエントリーを含むはてなブックマーク

.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に直してから出力し直すプログラムがあれば良いのですが。まあ、とりあえずはファイルを経由する実装でやっておこう。

トラックバック URL :
http://windy.ac/mt/mt-tb.cgi/1129
名前 :

URL :

コメント :

今日の井原. Since 2003.11.12 by Ihara
614 Entries - 0 Comments