Por que existe uma diferença entre a codificação do prompt de comando do Windows versus um arquivo em lote?
-
05-07-2019 - |
Pergunta
Por exemplo, suponha que eu tenha um arquivo em lote chamado 'test.cmd'
E simplesmente contém:
echo %1
Eu posso chamar isso diretamente do prompt de comando com 'test.cmd some¬arg'
E o resultado é que a string 'some¬arg'
está impresso.
No entanto, se eu fizer a mesma chamada em um segundo arquivo em lote, chamado 'tester.cmd'
Por uma questão de argumento, e eu chamo isso do comando solicitar o resultado é que a string 'some%arg'
está impresso.
O que estraga a codificação e como faço para contornar isso? Tenho certeza de que já consertei isso antes, mas não me lembro como ...
Obrigado!
Solução
Isso ocorre porque seu arquivo em lote é codificado em uma página de código diferente do CMD.exe está atualmente.
Nas configurações padrão ocidentais, o cmd.exe começa em CP850, mas os editores de texto geralmente trabalham em CP1252 (o que geralmente é errado denominado latim-1 ou ISO-8859-1).
Os caracteres "¬" e "¼" compartilham o mesmo código de caracteres nessas duas páginas de código, "BC".
A solução é simples. Codificar seu arquivo em lote na página 850 ou alternar o cmd.exe para o código da página 1252, emitindo chcp 1252
.