Qual é a diferença no redirecionamento e codificação de texto do Windows CMD e PowerShell?

0

Com certeza, este não é um ótimo título, mas, para ser honesto, não sabia como redigir a pergunta sem postar um ensaio como a pergunta. Esta descrição deve adicionar um pouco de carne.

Problema:

Eu tenho um script Python (não escrito por mim) que executo no Windows usando o Python 2.7. Isso é relativamente básico e extrai informações de várias fontes e IMPRIME a saída para o terminal. Parte dessa saída usa caracteres em um conjunto de caracteres não-ASCII, e é aí que a diversão começou.

Embora o script Python tenha sido executado corretamente na impressão do terminal na tela, assim que adicionei um redirecionamento de arquivo, recebi um erro e o script Python caiu. Depois de muita pesquisa, isso pareceu se resumir à maneira como o Python 2.7 manipula o Unicode, e eu trabalhei em torno disso definindo uma variável de ambiente do Windows para Python. Isso foi:

$env:PYTHONIOENCODING="UTF-8"

no PowerShell e

Set PYTHONIOENCODING="UTF-8"

no CMD.

OK, agora a saída do script Python pode ser redirecionada para um arquivo sem travar. O problema é que os dois ambientes fornecem resultados diferentes. O formato básico para executar o script Python é:

python pythonscript.py parm1 > test.txt

Embora isso funcione no CMD e no PowerShell, acabo com um arquivo com diferentes codificações e caracteres. Por exemplo, um personagem causando problemas é ø . Se eu executar a linha acima no CMD, o arquivo resultante será codificado como UTF-8 e mostrará corretamente esse caractere. No PowerShell, a execução do mesmo comando resulta em um arquivo codificado como UCS-2 LE BOM (como mostrado no NotePad ++), e o caractere acima, na verdade, é mostrado como 2 caracteres ├© .

Ainda mais bizarramente, se eu não redirecionar em ambos os ambientes (assim, apenas PRINT para o terminal), ambos mostram os caracteres incorretos.

Eu também tentei no PowerShell canalizar o CmdLet de saída, então:

python pythonscript.py parm1 | out-file -encoding UTF8 test.txt

Isso resulta em um arquivo codificado como UTF-8-BOM , mas os caracteres incorretos ainda aparecem. Eu tentei diferentes tipos de codificação aqui, e apesar de ter acabado com diferentes codificações de arquivos e diferentes caracteres, nada parece estar correto.

Também observei a página de códigos dos dois ambientes executando chcp . Em ambos os casos, isso retorna Active code page: 850 . Eu tentei configurar o PowerShell em uma página de código de 65001 (que é utf-8 ), e isso não fez diferença.

Então, estou completamente confuso.

    
por Swinster 16.04.2016 / 14:08

0 respostas