Pergunta

Eu tenho um pequeno programa de console c # que gera algum texto usando Console.WriteLine. Eu, então, canalizar essa saída em um arquivo de texto como:

c:myprogram > textfile.txt

No entanto, o arquivo é sempre um arquivo de texto ansi, mesmo quando eu começar a cmd com a opção / u. cmd /? diz sobre a opção / u:

/ U Faz com que a saída do interno comandos para um tubo ou arquivo para ser Unicode

E, de fato faz a diferença, quando eu faço um

c:echo "foo" > text.txt

o text.txt é unicode (sem BOM)

Eu me pergunto por canalizando a saída do meu programa de console em um novo arquivo não cria um arquivo unicode mesmo e como eu poderia mudar isso?

Eu só usar o Windows Power Shell (que produz um arquivo unicode com BOM correto), mas eu ainda gostaria de saber como fazê-lo com cmd.

Obrigado!

Foi útil?

Solução

A opção / U, como diz a documentação, afeta se comandos internos gerar a saída Unicode. Seu programa não é um dos comandos internos do cmd.exe, então a opção / U não afeta-lo.

Para criar um arquivo de texto Unicode, você precisa se certificar que seu programa é gerar texto Unicode.

Mesmo que pode não ser suficiente, no entanto. Me deparei com neste blog a partir Junfeng Zhang descrevendo como para escrever o texto Unicode em um programa de console. Ele verifica o tipo da alça de saída padrão de arquivo. Para arquivos de caracteres (um console ou porta LPT), ele chama WriteFileW. Para todos os outros tipos de identificadores (incluindo arquivos de disco e tubos), ele converte a cadeia de saída a página de código atual do console. Eu tenho medo Eu não sei como isso se traduz em termos Net, no entanto.

Outras dicas

Eu tinha um olhar como implementos mscorlib Console.WriteLine, e parece decidir sobre qual a saída de texto a codificação para usar com base em uma chamada para GetConsoleOutPutCP . Então, eu estou supondo (mas ainda não confimed) que a página de código retornado é um differnt para um console PS do que para um console cmd para que meu programa na verdade única saídas ansi durante a execução de cmd.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top