2011-05-06 14 views
8

Necesito especificar la página de códigos correcta para empacar los archivos con la biblioteca zip. Como veo, necesito especificar la codificación de la consola (866 en mi caso).Cómo obtener la codificación CMD/consola en C#

C:\Users\User>mode 

Status for device CON: 
---------------------- 
    Lines:   300 
    Columns:  130 
    Keyboard rate: 31 
    Keyboard delay: 1 
    Code page:  866 <- I need to get this value in C# code 

Console.OutputEncoding devuelve 1251, que no es lo que necesito.

Gracias,

Alex

Actualización 1: Obviamente, ejecute "modo" en cmd.exe y analizan la salida debería funcionar, pero parece demasiado grosero. Estoy buscando la solución .NET.

Actualización 2: La aplicación es la aplicación de formularios de Windows, no una aplicación de consola.

Respuesta

14

La predeterminada página de códigos para una aplicación de modo de consola está determinada por la configuración regional del sistema. Panel de control + Región e idioma, pestaña Administrativo, Cambiar configuración regional del sistema. Su página de código de Windows es el cirílico, por lo que es la página de códigos de la consola de modo que hay una posibilidad razonable de que el código funcionará:

 int lcid = GetSystemDefaultLCID(); 
     var ci = System.Globalization.CultureInfo.GetCultureInfo(lcid); 
     var page = ci.TextInfo.OEMCodePage; 
     // etc.. 

    [System.Runtime.InteropServices.DllImport("kernel32.dll")] 
    public static extern int GetSystemDefaultLCID(); 

Haz evitar escribir código como este, codificaciones de texto de 8 bits son un campo de minas. Ciertamente no hay ninguna razón de peso para tener que ejecutar un programa zip en modo consola, hay muchas librerías zip .NET disponibles.

+0

¡Funciona, gracias! –

+0

+1, con ** actualización 2 ** esta es la mejor respuesta – Alex

3

Usted necesita Encoding.CodePage propiedad:

var codePage = Console.OutputEncoding.CodePage; 

que le dará un valor de página de códigos (866 en su ejemplo).

+0

MessageBox.Show (Console.OutputEncoding.CodePage.ToString()) -> 1251. Por cierto, esta es la aplicación de formularios de Windows, no una aplicación de consola. –

Cuestiones relacionadas