2012-01-27 5 views
5

Sto provando ad acquisire l'output da un'applicazione console eseguendolo in un test utilizzando System.Diagnostics.Process. Sto avendo problemi con la codifica dei caratteri. "£" viene visualizzato come "œ" nel test, ma quando eseguo l'applicazione della console viene visualizzato correttamente come "£".Problema di codifica durante l'acquisizione di un output dell'applicazione console in un test

Se si imposta Console.Out.Encoding = Encoding.Default, funziona nei test ma non viene visualizzato correttamente durante l'esecuzione normale.

Cosa sta succedendo qui e come lo risolvo?

+0

come si esegue l'app per console dal runner di test? – wal

risposta

4

È necessario impostare la StandardOutputEncoding sul ProcessStartInfo oggetto nel caso di test:

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

È possibile trovare quello CodePage si utilizza nella vostra console app eseguendo

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

che restituisce 850 (DOS dell'Europa occidentale)

È inoltre possibile utilizzare la proprietà BodyName come argomento per GetEncoding che è:

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

Mi sono imbattuto in questo problema. Sto reindirizzando l'output su un file e sto girando da un prompt di cmd ma vorrei che l'output rimanesse codificato in UTF-8. C'è un modo per impostarlo in una finestra di comando? poiché non sto avviando il processo tramite un'altra applicazione C#. Grazie –

+1

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

0

Penso che tu sia sulla strada giusta. Come test ho eseguito questo codice:

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

Quando viene eseguito come un'applicazione di console emette:

Western European (Windows) 
OEM United States 

Quando eseguito come applicazione Windows emette:

Western European (Windows) 
Western European (Windows) 

Sospetto che durante la lettura dall'output della console dal runner di test sarà necessario impostare la codifica del lettore in modo che corrisponda alla codifica in cui è scritto l'output, probabilmente occidentale europeo (Windows), anche se non posso sapere per sicuro.

Problemi correlati