2012-01-27 13 views
5

Tôi đang cố gắng ghi lại đầu ra từ một ứng dụng bảng điều khiển bằng cách chạy nó trong một thử nghiệm bằng System.Diagnostics.Process. Tôi gặp sự cố với mã hóa ký tự. "£" được hiển thị dưới dạng "œ" trong bài kiểm tra, nhưng khi tôi chạy ứng dụng bảng điều khiển, nó hiển thị chính xác là "£".Sự cố mã hóa khi chụp đầu ra ứng dụng bảng điều khiển trong thử nghiệm

Nếu tôi đặt Console.Out.Encoding = Encoding.Default, nó hoạt động trong các thử nghiệm nhưng không hiển thị đúng khi chạy bình thường.

Điều gì đang xảy ra ở đây và cách khắc phục sự cố?

+0

bạn đang chạy ứng dụng bảng điều khiển từ nhân vật thử nghiệm của mình như thế nào? – wal

Trả lời

4

Bạn cần phải đặt StandardOutputEncoding trên đối tượng ProcessStartInfo bạn trong trường hợp thử nghiệm của bạn:

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

Bạn có thể tìm thấy những gì bảng mã bạn đang sử dụng trong ứng dụng giao diện điều khiển của bạn bằng cách chạy

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

trả về 850 (Tây Âu DOS)

Bạn cũng có thể sử dụng thuộc tính BodyName làm arg cho GetEncoding là:

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

Tôi đã gặp phải vấn đề này. Tôi đang chuyển hướng đầu ra đến một tập tin và chạy từ một dấu nhắc cmd nhưng tôi muốn đầu ra vẫn được mã hóa trong UTF-8. Có cách nào để thiết lập điều này trong một cửa sổ lệnh? vì tôi không bắt đầu quá trình thông qua ứng dụng C# khác. Cảm ơn –

+1

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

0

Tôi nghĩ bạn đang đi đúng hướng. Là một thử nghiệm tôi thực thi mã này:

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

Khi chạy như một ứng dụng giao diện điều khiển nó ra:

Western European (Windows) 
OEM United States 

Khi chạy như một ứng dụng cửa sổ nó ra:

Western European (Windows) 
Western European (Windows) 

Tôi nghi ngờ rằng khi đọc từ đầu ra bàn điều khiển từ Á hậu thử nghiệm, bạn sẽ cần phải thiết lập mã hóa đầu đọc của bạn để khớp với mã hóa mà đầu ra được viết, có lẽ là Tây Âu (Windows), mặc dù tôi không thể biết chắc chắn rồi.