Prompt de Comando “tree” mostra Unicode no console, mas gera um arquivo em ASCII

5

No cmd.exe do Windows 10, se eu fizer

tree
C:.
├───a
│   ├───b
│   └───etc...

exibe claramente as barras e traços do Unicode corretamente no console.

Mas se eu redirecionar essa saída para um arquivo

tree > tree.txt

o conteúdo do arquivo é:

C:.
³ÄÄÄa
³   ÃÄÄÄb
³   ÀÄÄÄetc...

Falha ao escrever corretamente os caracteres Unicode.

Ele nem consegue ler o que escreveu:

tree > tree.txt
type tree.txt
C:.
����a
�   ����b
�   ����etc...

(pode aparecer como " " aqui (pontos de interrogação em um quadrado inclinado), mas no console eles aparecem como caixas vazias)

Já tentei estas sugestões sem sorte:

Try chcp 1252 or chcp 65001 from the command line. With Lucida Console or other font support.

CMD /U /c tree > tree.txt

Eu estava usando este comando incorretamente, agora corrigido, mas ainda assim recebo o mesmo resultado que apenas tree - ele é exibido no console, mas a saída do arquivo ainda é daqueles caracteres estranhos.

É estranho que o texto seja exibido no console, mas gravar no arquivo atrapalha a codificação. Qual poderia ser o problema aqui?

    
por laggingreflex 23.03.2016 / 22:21

1 resposta

2

A codificação geralmente usada para os caracteres de desenho de caixa é de 850, mas mesmo isso não ajuda no meu sistema Windows 8.1. Eu só encontrei uma maneira de contornar a má manipulação de codificações de texto de cmd : usando um programa que lida bem com codificação, ou seja, PowerShell.

É o redirecionamento > que destrói os caracteres, então vamos apenas sugar a saída tree e compactá-la em um arquivo sem o simples redirecionamento cmd :

Invoke-Expression "tree" | Out-File "tree.txt"

Ou mais curto:

iex "tree" > "tree.txt"

Para criar uma instância do PowerShell que execute esse comando e saia, use-o em um prompt de comando ou arquivo em lotes:

powershell -command "iex \"tree\" > \"tree.txt\""

O arquivo resultante pode ser visualizado com sucesso no Bloco de Notas ou por um type normal.

    
por 24.03.2016 / 01:51