Estoy tratando de leer cadena Unicode desde una consola en C#, por el bien de ejemplo, deja que su uset uno:lectura Unicode desde la consola
c: \ SVN \ D³ebugger \ src \ виталик \ Program.cs
al principio sólo trataron de Console.ReadLine()
que me volvió c:\SVN\D3ebugger\src\???????\Program.cs
he tratado de establecer el Console.InputEncoding a UTF8 al igual que Console.InputEncoding = Encoding.UTF8
pero eso me volvieron c:\SVN\D³ebugger\src\???????\Program.cs
, básicamente ensuciar la parte de la cadena cirílico .
Al azar tropezando He intentado configurar la codificación de esa manera, Console.InputEncoding = Encoding.GetEncoding(1251);
que devolvió c:\SVN\D?ebugger\src\виталик\Program.cs
, esta vez corrompiendo el carácter ³.
En este punto, parece que al cambiar encodings para InputStream, solo puedo obtener un idioma a la vez.
También he intentado ir nativo y hacer algo así:
// Code
public static string ReadLine()
{
const uint nNumberOfCharsToRead = 1024;
StringBuilder buffer = new StringBuilder();
uint charsRead = 0;
bool result = ReadConsoleW(GetStdHandle(STD_INPUT_HANDLE), buffer, nNumberOfCharsToRead, out charsRead, (IntPtr)0);
// Return the input minus the newline character
if (result && charsRead > 1) return buffer.ToString(0, (int)charsRead - 1);
return string.Empty;
}
// Extern definitions
[DllImport("Kernel32.DLL", ExactSpelling = true)]
internal static extern IntPtr GetStdHandle(int nStdHandle);
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, ExactSpelling = true)]
static extern bool ReadConsoleW(IntPtr hConsoleInput, [Out] StringBuilder lpBuffer,
uint nNumberOfCharsToRead, out uint lpNumberOfCharsRead, IntPtr lpReserved);
que estaba trabajando bien para las cadenas no Unicode, sin embargo, cuando traté de hacer que lee mi cadena de ejemplo, se bloqueó la aplicación . Intenté decirle a Visual Studio que rompa TODAS las excepciones (incluidas las nativas), pero la aplicación aún se bloqueará.
También encontré this error de apertura en Microsoft Connect que parece indicar que ahora es imposible leer Unicode desde el InputStream de la consola.
Vale la pena señalar, aunque no está estrictamente relacionado con mi pregunta, que Console.WriteLine puede imprimir esta cadena muy bien, si Console.OutputEncoding está configurado en UTF8.
¡Gracias!
Actualización 1
Busco a una solución para .NET 3.5
Actualización 2
Actualizado con el código nativo completo que he usado.
¿Es posible/aceptable el uso de una tubería con nombre en lugar de la consola? – Goyuix
Si no encuentro una solución, probablemente sea eso lo que haré ... – VitalyB