A saída do comando não está funcionando após a alteração da página de códigos

1

Eu encontrei uma questão bastante estranha ao investigar o mundo distorcido da codificação de caracteres. No Windows, se eu digitar 'tree', o comando funcionará como esperado, mas se eu digitar 'chcp 65001' (que é UTF-8) e, em seguida, 'tree', ele quebrará novamente.

ou seja,

> tree
> chcp 65001
> tree

IssoestánoWindows7,baunilhacmd,idiomaespanhol.Alémdisso,aoredirecionarasaídaparaumarquivo,oconteúdodeleéomesmoantesedepoisdochcp(cheiode"ÀÄÄÄ").

Algumas pesquisas mostraram que a codificação é OEM-850.

Eu sei que isso parece uma pergunta supérflua, mas ao compilar programas (principalmente com o gcc) eu tenho o mesmo problema.

Switches/Ae/Uparacmdtambémnãoajudaram.

    
por Ricardo Zorio 09.05.2018 / 20:45

1 resposta

0

Esse problema com entrada não ASCII é reproduzível no console para todas as versões do Windows até e incluindo o Windows 10. O processo de host do console, ou seja, conhost.exe , não foi projetado para UTF-8 (página de códigos 65001) e hasn foi atualizado para apoiá-lo de forma consistente.

Em particular, a entrada não-ASCII causa uma leitura vazia e uma leitura vazia é obtida para ser um fim-de-arquivo, então a leitura da entrada pelo console pára, resultando em saída truncada.

A opção / U de cmd.exe também não é útil, pois funciona apenas para comandos internos. Você pode obter melhores resultados de alguns aplicativos direcionando a saída do comando para um arquivo, mas o arquivo não terá um UTF-8 Marca de pedido de byte (BOM) .

Em suma, não espere muito de chcp 65001 e você não ficará desapontado. A única versão Unicode que funciona bem no Windows é o Unicode de 16 bits.

    
por 09.05.2018 / 22:57