2009-01-07 13 views
6

me sale el siguiente error:"el parámetro es incorrecto" cuando se configura como consola de codificación Unicode

Unhandled Exception: System.IO.IOException: The parameter is incorrect. 
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 
at System.IO.__Error.WinIOError() 
at System.Console.set_OutputEncoding(Encoding value) 
at (my program) 

cuando corro la siguiente línea de código:

Console.OutputEncoding = Encoding.Unicode; 

Cualquier idea de por qué? No obtengo este error si configuro la codificación en UTF8.

Respuesta

3

Encoding.Unicode es UTF-16 que utiliza 2 bytes para codificar todos los caracteres. Los caracteres ASCII (caracteres en inglés) son los mismos en UTF-8 (bytes individuales, mismos valores), por lo que podría ser la razón por la que funciona.

Supongo que Windows Command Shell no es totalmente compatible con Unicode. Es curioso que la GUI de Powershell 2 sea compatible con UTF-16 (hasta donde yo sé), pero el programa arroja la misma excepción allí.

El código siguiente funciona lo que demuestra que el objeto de la consola puede tener su salida redirigida y apoyo Encoding.Unicode:

FileStream testStream = File.Create("test.txt"); 
TextWriter writer = new StreamWriter(testStream, Encoding.Unicode); 
Console.SetOut(writer);    
Console.WriteLine("Hello World: \u263B"); // unicode smiley face 
writer.Close(); // flush the output 
0

Creo que tiene que ver con el CodePage del Encoding que está utilizando. En particular, ver SetConsoleOutputCP Function. No sé mucho más, lo siento.

Editar: Informé la referencia al SetConsoleOutputCP porque esta función se llama internamente (a través de PInvoke) por la (operación de) Console.OutputEncoding.

1

De acuerdo con la lista de Code Page Identifiers on MSDN, las UTF-16 y UTF-32 codificaciones se gestionan -sólo:

1200 utf-16  Unicode UTF-16, little endian byte order (BMP of ISO 10646); available only to managed applications 
1201 unicodeFFFE Unicode UTF-16, big endian byte order; available only to managed applications 
12000 utf-32  Unicode UTF-32, little endian byte order; available only to managed applications 
12001 utf-32BE  Unicode UTF-32, big endian byte order; available only to managed applications 

Por ejemplo, no están listadas en el registro con las otras páginas de códigos del sistema en HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ control \ NLS \ CodePage.

Cuestiones relacionadas