Em uma caixa do Windows 10, via linha de comando, executo este comando:
C:\Users\idiot\Music>dir /a:d /s /b >> tom-music-2016-july.txt
O objetivo é listar todos os diretórios. Mas noto que diretórios com letras não romanas no nome serão impressos ????? em vez dos caracteres russos ou chineses. Por que?
Inicialmente pensei que o problema estava nas fontes do sistema. (Não tenho um pacote de idioma russo instalado). Mas posso renomear arquivos para nomes de arquivos russos no Win Explorer. É importante ressaltar que quando executo o comando DIR na janela (sem canalizá-lo para um arquivo de saída), euposso ver claramente os caracteres russos.
Isso implica para mim que o problema está no comando que canaliza algo para um arquivo ou no editor de texto do Windows que está tentando ler a saída.
Tentei abrir o arquivo em dois editores de texto separados e até mesmo em um navegador da web, mas vejo caracteres de ponto de interrogação de qualquer maneira.
Alguém pode sugerir uma causa para este problema e uma possível solução?
Estou correto ao presumir que não precisarei fazer nenhum processamento nos próprios arquivos ou diretórios? Obrigado.
Pós-escrito:Fiquei particularmente intrigado com o motivo pelo qual os caracteres russos são renderizados corretamente na janela do console, mas quando são canalizados para um arquivo, vejo os pontos de interrogação.
Responder1
Nada secreto: a codificação de um arquivo criado usando >
redirecionamento segue a página de código ativa atual de cmd
. O ?
(um ponto de interrogação) é simplesmente um substituto (marcador de substituição) se um caractere não existir nessa página de código.
Solução: use UTF-8
(página de código 65001)comochcp 65001
O exemplo a seguir ilustra (e talvez prove) muito bem:
d:\bat\UnASCII Names> chcp 1250
Active code page: 1250
d:\bat\UnASCII Names> dir /b /AD >dir1250.txt
d:\bat\UnASCII Names> chcp 65001
Active code page: 65001
d:\bat\UnASCII Names> dir /b /AD >dir65001.txt
Os arquivos dir1250.txt
e dir65001.txt
abertos no Notepad++:
Por favor, note queassim chamadoANSI
é a página de código 1250 (Europa Central) na minha localidade, enquanto a sua pode ser, por exemplo, 1252 (EUA e Europa Ocidental)…