На компьютере с Windows 10 через командную строку я запускаю следующую команду:
C:\Users\idiot\Music>dir /a:d /s /b >> tom-music-2016-июль.txt
Целью является перечисление всех каталогов. Но я заметил, что каталоги с нелатинскими буквами в имени будут печатать ????? вместо русских или китайских символов. Почему?
Сначала я думал, что проблема в системных шрифтах. (У меня не установлен русский языковой пакет). Но я могу переименовывать файлы на русские имена в проводнике Win. Важно, что когда я запускаю команду DIR в окне (без перенаправления ее в выходной файл), яможно ясно видеть русские символы.
Это говорит мне о том, что проблема либо в команде, которая передает что-то в файл, либо в текстовом редакторе Windows, который пытается прочитать вывод.
Я пробовал открыть файл в двух отдельных текстовых редакторах и даже в веб-браузере, но все равно вижу знаки вопроса.
Может ли кто-нибудь подсказать причину этой проблемы и возможное решение?
Правильно ли я понимаю, что мне не нужно будет выполнять какую-либо обработку самих файлов или каталогов? Спасибо.
Постскриптум:Меня особенно озадачивает, почему русские символы нормально отображаются в окне консоли, но когда они передаются в файл, я вижу вопросительные знаки.
решение1
Ничего секретного: кодировка файла, созданного с помощью >
перенаправления, следует текущей активной кодовой странице cmd
. ?
(Вопросительный знак) — это просто замена (маркер замены), если символ отсутствует в такой кодовой странице.
Решение: использовать UTF-8
(код страницы 65001)какchcp 65001
Следующий пример иллюстрирует (и, возможно, доказывает) это довольно хорошо:
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
Файлы dir1250.txt
и dir65001.txt
открытые в Notepad++:
Обратите внимание, чтотак называемыеANSI
в моем регионе кодовая страница 1250 (Центральная Европа), а у вас она может быть, например, 1252 (США и Западная Европа)…