2012-01-27 27 views
5

System.Diagnostics.Process kullanarak bir sınamada çalıştırarak bir konsol uygulamasından çıktı yakalamaya çalışıyorum. Karakter kodlamasıyla ilgili sorun yaşıyorum. "£", testte "œ" olarak görünüyor, ancak konsol uygulamasını çalıştırdığımda "£" olarak doğru şekilde görüntüleniyor.Bir uygulamada konsol uygulama çıktısı alınırken kodlama sorunu

Console.Out.Encoding = Encoding.Default öğesini ayarlarsam, bu sınamalarda çalışır, ancak normal şekilde çalışırken düzgün görüntülenmez.

Burada neler oluyor ve nasıl giderilir?

+0

Konsol uygulamanızı test yürütücünüzden nasıl çalıştırıyorsunuz? – wal

cevap

4

Sen test ihtimaline karşı ProcessStartInfo nesne üzerinde StandardOutputEncoding ayarlamanız gerekir:

var process = new Process(); 
var startInfo = new ProcessStartInfo(@"yourapp.exe"); 
startInfo.StandardOutputEncoding = Encoding.GetEncoding(850); 
Sen 850 döndürür

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

çalıştırarak CodePage size konsol uygulamasında kullandığınız olanı bulabilirsiniz

(Batı Avrupa DOS)

için BodyName özelliğini arg olarak kullanabilirsiniz. :

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

Bu sorunla karşılaştım. Çıktıyı bir dosyaya yönlendiriyorum ve bir cmd komut isteminden çalıştırıyorum ancak çıktıyı UTF-8'de kodlanmış olarak kalmak istiyorum. Bunu bir komut penceresinde ayarlamanın bir yolu var mı? işlemi başka bir C# uygulamasıyla başlatmayacağım gibi. Teşekkürler –

+1

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

0

Sanırım doğru yoldasınız. o çıktılar bir konsol uygulaması olarak çalıştırdığınızda

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

: bir test olarak ben bu kodu idam

: Bu çıktılar bir pencere uygulaması olarak çalışacak

Western European (Windows) 
OEM United States 

Western European (Windows) 
Western European (Windows) 

Test yürütücüsünden gelen konsol çıktısını okurken, okuyucunun kodlamasının çıktısını yazdığı kodlamayla eşleşmesi gerektiğinden şüpheleniyorum, muhtemelen Batı Avrupa (Windows), bilmiyorum ama emin.