2012-01-27 2 views
5

コンソールアプリケーションからの出力をSystem.Diagnostics.Processを使用してテストで実行してキャプチャしようとしています。文字エンコーディングに問題があります。テストでは "£"が " - "として表示されていますが、コンソールアプリケーションを実行すると「£」と正しく表示されます。テストでコンソールアプリケーションの出力をキャプチャするときのエンコードの問題

Console.Out.Encoding = Encoding.Defaultを設定すると、テストでは機能しますが、正常に動作していると正しく表示されません。

ここでは何が起こっていて、どうすれば修正できますか?

+0

テストランナーからコンソールアプリケーションをどのように実行していますか? – wal

答えて

4

あなたは、あなたのテストケースであなたのProcessStartInfoオブジェクト上StandardOutputEncodingを設定する必要があります。

var process = new Process(); 
var startInfo = new ProcessStartInfo(@"yourapp.exe"); 
startInfo.StandardOutputEncoding = Encoding.GetEncoding(850); 

あなたはコードページは、あなたが850を返す

Console.WriteLine(Console.Out.Encoding.CodePage); 

を実行して、コンソールアプリケーションで使用しているものを見つけることができます(西ヨーロッパのDOS)

BodyNameプロパティをargとして使用してGetEncoding

startInfo.StandardOutputEncoding = Encoding.GetEncoding("ibm850"); 
+0

私はこの問題に遭遇しました。出力をファイルにリダイレクトしてcmdプロンプトから実行していますが、出力をUTF-8でエンコードしたままにしておきたいと思います。これをコマンドウィンドウで設定する方法はありますか?別のC#アプリケーションを使用してプロセスを開始するわけではありません。ありがとう –

+1

@ChrisWalsh参照http://stackoverflow.com/questions/388490/unicode-characters-in-windows-command-line-how? 'chcp 65001' – wal

0

あなたは正しい軌道にいると思います。それは出力コンソールアプリケーションとして実行すると

Console.WriteLine(Encoding.Default.EncodingName);   
Console.WriteLine(Console.Out.Encoding.EncodingName); 

: テストとして、私はこのコードを実行

:それは出力Windowsアプリケーションとして実行

Western European (Windows) 
OEM United States 

Western European (Windows) 
Western European (Windows) 

私は、テストランナーからのコンソール出力から読み込むときに、出力が書き込まれるエンコーディングと一致するようにリーダーのエンコーディングを設定する必要があると思われます。おそらく西ヨーロッパ(Windows)ですが、確かに。