2012-01-27 13 views
5

Estoy intentando capturar la salida de una aplicación de consola ejecutándola en una prueba usando System.Diagnostics.Process. Tengo problemas con la codificación de caracteres. "£" se muestra como "œ" en la prueba, pero cuando ejecuto la aplicación de la consola se muestra correctamente como "£".Problema de codificación al capturar la salida de la aplicación de consola en una prueba

Si configuro Console.Out.Encoding = Encoding.Default, funciona en las pruebas pero no se muestra correctamente cuando se ejecuta normalmente.

¿Qué está pasando aquí y cómo lo soluciono?

+0

¿cómo está ejecutando la aplicación de la consola de su corredor de prueba? – wal

Respuesta

4

Es necesario configurar el StandardOutputEncoding en el objeto ProcessStartInfo en el caso de test:

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

Usted puede encontrar lo CodePage que está utilizando en su aplicación de consola mediante la ejecución de

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

que devuelve 850 (Western European DOS)

También podría usar la propiedad BodyName como arg a GetEncoding que es:

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

Me he encontrado con este problema. Estoy redireccionando la salida a un archivo y ejecutando desde un indicador de cmd, pero me gustaría que la salida permanezca codificada en UTF-8. ¿Hay alguna manera de configurar esto en una ventana de comandos? ya que no estoy comenzando el proceso a través de otra aplicación C#. Gracias –

+1

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

0

Creo que está en el camino correcto. Como prueba de que la ejecución de este código:

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

Cuando se ejecuta como una aplicación de consola que da salida:

Western European (Windows) 
OEM United States 

Cuando se ejecuta como una aplicación de Windows que da salida:

Western European (Windows) 
Western European (Windows) 

Sospecho que al leer desde la salida de la consola desde el corredor de prueba deberá configurar la codificación de su lector para que coincida con la codificación en la que está escrita la salida, probablemente europeo occidental (Windows), aunque no puedo saberlo. Por supuesto.

Cuestiones relacionadas