Hay una gran cantidad de historia detrás de esa pregunta, voy a fideos durante un tiempo primero. Las aplicaciones del modo consola solo pueden operar con una codificación de texto de 8 bits. Esto se remonta a una decisión de diseño tomada hace 42 años por Ken Thompson et al cuando diseñaron Unix. Una característica central de Unix fue que la E/S del terminal se realizó a través de las tuberías y se podían encadenar las tuberías para alimentar la salida de un programa a la entrada de otro. Esta característica también se implementó en Windows y también es compatible con .NET con las propiedades ProcessStartInfo.RedirectStandardXxxx.
Buena característica, pero se convirtió en un problema cuando los sistemas operativos comenzaron a adoptar Unicode. Windows NT fue el primero que fue totalmente Unicode en su núcleo. Los caracteres Unicode siempre deben estar codificados, una opción común en aquel entonces era UCS, que luego se transformó en utf-16. Ahora hay un problema con la redirección de E/S, un programa que escupe caracteres codificados de 16 bits no va a funcionar bien cuando se redirige a un programa que todavía usa caracteres codificados de 8 bits.
Acredite también a Ken Thompson al encontrar una solución para este problema, inventó la codificación de utf-8.
Eso funciona en Windows también. Fácil de hacer en una aplicación de modo de consola, hay que volver a asignar la propiedad Console.OutputEncoding:
using System;
using System.Text;
class Program {
static void Main(string[] args) {
Console.OutputEncoding = Encoding.UTF8;
Console.WriteLine("Ĥėļŀō ŵŏŗłđ");
Console.ReadLine();
}
}
Ahora vamos sin embargo encuentra con otro problema, la fuente seleccionada para la ventana de la consola es probable que sea incapaz de renderizar el texto Presione Alt + espacio para invocar el menú del sistema, Propiedades, pestaña Fuente. Tendrá que elegir una fuente que no sea de trama. Los pickings son muy delgados, en Vista y más puedes elegir Consolas. Vuelva a ejecutar su programa y los caracteres acentuados se deben representar correctamente. Desafortunadamente, forzar la fuente de la consola mediante programación es un problema, deberá documentar este paso de configuración. Además, una fuente como Consolas no tiene el conjunto completo de posibles glifos Unicode. Es probable que veas rectángulos aparecer para los puntos de código Unicode para los cuales no tiene glifos. Todo un recordatorio poco sutil de que crear un programa GUI es realmente su mejor opción.
Puede necesitar cambiar la fuente o la página de códigos de su consola; ver http://stackoverflow.com/questions/1259084/what-encoding-code-page-is-cmd-exe-using – nneonneo
Esto no suena como una limitación de C#/.NET, sino más bien: una limitación de la consola . Por ejemplo, mi consola está en ["ibm850"] (http://en.wikipedia.org/wiki/Code_page_850), una página de códigos de 8 bits: no hay posibilidad de escribir unicode completo en "ibm850". –
Solo hay tres fuentes disponibles en mi consola ... Lucida, Consolas, Ráster ... ¿es esto debido a esta limitación? –