ss64 commands batch unicode text cmd pipe

unicode - commands - cmd parameters



Windows cmd pipe no unicode incluso con el modificador/U (2)

Eché un vistazo cómo mscorlib implementa Console.WriteLine, y parece decidir qué codificación de salida de texto usar en función de una llamada a GetConsoleOutPutCP . Así que supongo (pero aún no lo he confirmado) que la página de códigos devuelta es diferente para una consola PS que para una consola cmd, de modo que mi programa solo emite ansi cuando se ejecuta desde cmd.

Tengo un pequeño programa de consola c # que genera algo de texto usando Console.WriteLine. Luego canalizo esta salida a un archivo de texto como:

c:myprogram > textfile.txt

Sin embargo, el archivo siempre es un archivo de texto ansi, incluso cuando inicio cmd con el modificador / u. cmd /? dice sobre el modificador / u:

/ U Hace que la salida de los comandos internos a un conducto o archivo sea Unicode

Y de hecho hace una diferencia, cuando hago un

c:echo "foo" > text.txt

el texto.txt es unicode (sin lista de materiales)

Me pregunto por qué conectar el resultado de mi programa de consola en un nuevo archivo no crea un archivo Unicode de la misma manera y cómo podría cambiar eso?

Solo uso Windows Power Shell (que produce un archivo Unicode con la lista de materiales correcta), pero me gustaría saber cómo hacerlo con cmd.

¡Gracias!


El modificador / U, como dice la documentación, afecta si los comandos internos generan salida Unicode. Su programa no es uno de los comandos internos de cmd.exe, por lo que la opción / U no lo afecta.

Para crear un archivo de texto Unicode, debe asegurarse de que su programa genere texto Unicode.

Incluso eso puede no ser suficiente, sin embargo. Encontré este blog de Junfeng Zhang que describe cómo escribir texto Unicode en un programa de consola. Comprueba el tipo de archivo del identificador de salida estándar. Para archivos de caracteres (una consola o puerto LPT), llama a WriteFileW. Para todos los demás tipos de identificadores (incluidos los archivos de disco y las tuberías), convierte la cadena de salida en la página de códigos actual de la consola. Sin embargo, me temo que no sé cómo se traduce en términos .Net.